在这篇文章中,我们将带领您了解T-SQLCASE子句:关于使用外部JOIN指定WHENNULL的问题的全貌,同时,我们还将为您介绍有关c#–当where子句与NULL值进行比较时,LINQ-to-SQ
在这篇文章中,我们将带领您了解T-SQL CASE子句:关于使用外部JOIN指定WHEN NULL的问题的全貌,同时,我们还将为您介绍有关c# – 当where子句与NULL值进行比较时,LINQ-to-SQL查询不返回行、C#Where子句不会从可为null的布尔中返回null值、IS NULL vs = NULL在where子句中+ SQL Server、MySql Inner Join with WHERE子句的知识,以帮助您更好地理解这个主题。
本文目录一览:- T-SQL CASE子句:关于使用外部JOIN指定WHEN NULL的问题
- c# – 当where子句与NULL值进行比较时,LINQ-to-SQL查询不返回行
- C#Where子句不会从可为null的布尔中返回null值
- IS NULL vs = NULL在where子句中+ SQL Server
- MySql Inner Join with WHERE子句
T-SQL CASE子句:关于使用外部JOIN指定WHEN NULL的问题
后续查询可以正确显示所有当前/潜在客户的记录,而不管他/她是否下了订单。但是,即使在某些情况下为空(即,透视客户尚未下订单时)YesNO
,以下SELECT
语句的别名也始终返回1o.OrderID
。为什么?我认为下面的CASE语句是正确的(。我正在使用SQLServer 2012
。 注意 :请记住,尽管OrderID是PK,但如果不满足联接条件,则它将与OUTER
JOIN中的orders表的所有其他列一起始终为null。
SELECT c.customerID, o.OrderID, CASE When o.OrderID is NULL Then 0 Else 1 End as YesNOFROM Customers cLEFT JOIN Orders o ON c.customerID = o.customerID
答案1
尝试使用ISNULL
我非常确定,原因是因为当您将IS NULL与NULL比较时,结果为NULL,因此为False,因此为什么要对ELSE 1求值
SELECT c.customerID, o.OrderID, CASE When ISNULL(o.OrderID, 0) = 0 Then 0 Else 1 End as YesNOFROM Customers cLEFT JOIN Orders o ON c.customerID = o.customerID
c# – 当where子句与NULL值进行比较时,LINQ-to-SQL查询不返回行
现在假设两列中的数据是:
ID Role -- ---- 1 NULL 2 Admin
查询如下所示:
List<types> t1 = ( from a in datacontext.RoleTable where a.Role != "Admin" select a ).ToList();
我认为上面的查询应该返回表的第一条记录,因为它的Role列不等于’Admin’,但查询返回一个空列表.
现在,当我使用此查询时:
List<types> t2 = ( from a in datacontext.RoleType where a.Role != "Admin" && a.Role == dbnull.Value.ToString() select a ).ToList();
我得到了正确的答案.
任何人都可以告诉我为什么第一个查询不起作用.
仅供参考:如果表中第一行中的Role列更改为User而不是NULL,则第一个查询可以正常工作.
我正在使用sql Express和LINQ to sql.
解决方法
select * from RoleTable where Role != 'Admin'
现在,在sql NULL!=’Admin’不是TRUE(也不是FALSE – 它是未定义的).
这是LINQ to sql提供的抽象漏洞并且您仍然需要知道sql的许多情况之一.
顺便说一句:你的第二个查询也是错误的,它只会选择那些为null的行.它不会选择具有“用户”角色的行.
正确的查询将如下所示:
List<types> t2 = (from a in datacontext.RoleTable where a.Role != "Admin" || a.Role == null select a).ToList();
C#Where子句不会从可为null的布尔中返回null值
Reproduced this with SQL server.
Added your Material class. Correction to you keys were made.
The HasValue as stated was fine. Also Convert.ToBoolean helped with translation.
Some options for various results have been provided.
[HttpGet]
public IActionResult GetNulls()
{
List<Material> mats = new List<Material>
{
new Material { MaterialID = 1,StockQty = 10,FlagForDelete = true }, new Material { MaterialID = 2,StockQty = 20,FlagForDelete = false }, new Material { MaterialID = 3,StockQty = 30 }
};
string Response = "SUCCESS:";
try
{
List<Material> NotFalse = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(false)).ToList();
List<Material> NotTrue = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(true)).ToList();
List<Material> NotEither = mats.Where(m => m.FlagForDelete != Convert.ToBoolean(true) && m.FlagForDelete != Convert.ToBoolean(false)).ToList();
List<Material> Lakemann = mats.Where(m => !m.FlagForDelete.HasValue).ToList();
var combine = new { NotFalse,NotTrue,NotEither,Lakemann };
var options = new JsonSerializerOptions { WriteIndented = true };
string json = JsonSerializer.Serialize(combine,options);
return Ok(json);
}
catch (Exception ex)
{Response = "ERROR: **" + ex.Message;}
finally
{};
return NoContent();
}
JSON
{
"NotFalse": [
{
"MaterialID": 1, "StockQty": 10, "FlagForDelete": true
}, {
"MaterialID": 3, "StockQty": 30, "FlagForDelete": null
}
], "NotTrue": [
{
"MaterialID": 2, "StockQty": 20, "FlagForDelete": false
}, "NotEither": [
{
"MaterialID": 3, "Lakemann": [
{
"MaterialID": 3, "FlagForDelete": null
}
]
}
,
在C#中,可以为null的布尔列将映射到bool?
;
...Where(ffd => ffd.FlagForDelete == false);
...Where(ffd => !ffd.FlagForDelete.HasValue);
IS NULL vs = NULL在where子句中+ SQL Server
如何检查值IS NULL [or] = @param
(@param为空)
前任:
Select column1 from Table1where column2 IS NULL => works fine
如果我想将比较值(IS NULL)替换为@param。如何才能做到这一点
Select column1 from Table1where column2 = @param => this works fine until @param got some value in it and if is null never finds a record.
如何实现?
答案1
小编典典select column1 from Table1 where (@param is null and column2 is null) or (column2 = @param)
MySql Inner Join with WHERE子句
这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或格外狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。
7年前关闭。
这是我的代码:
SELECT table1.f_id FROM table1 WHERE table1.f_com_id = ''430'' AND table1.f_status = ''Submitted'' INNER JOIN table2 ON table2.f_id = table1.f_id where table2.f_type = ''InProcess''
我需要来自table1
所有与f_com_id
430相关联的ID和已提交状态的信息,并且该类型应该仅在存储在其他table(table2
)中的过程中
f_id
是p_key
和f_key
在两个表中。
但这给了我错误,我想我把这个WHERE
子句放错了,怎么解决呢?
错误消息:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第2行的’INNER JOIN table2 ON
table2.f_id =’附近使用正确的语法
答案1
小编典典是的,你是对的。您将WHERE
子句放置错了。您只能WHERE
在单个查询中使用一个子句,因此请尝试AND
以下多个条件:
SELECT table1.f_id FROM table1 INNER JOIN table2 ON table2.f_id = table1.f_id WHERE table2.f_type = ''InProcess'' AND f_com_id = ''430'' AND f_status = ''Submitted''
关于T-SQL CASE子句:关于使用外部JOIN指定WHEN NULL的问题的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c# – 当where子句与NULL值进行比较时,LINQ-to-SQL查询不返回行、C#Where子句不会从可为null的布尔中返回null值、IS NULL vs = NULL在where子句中+ SQL Server、MySql Inner Join with WHERE子句的相关信息,请在本站寻找。
本文标签: