在SQL Server中,如果 nullParam=NULL在where子句中,它总是计算为false.这是违反直觉的,并且给我带来了许多错误.我确实理解IS NULL和IS NOT NULL关键字是正确的方法.但是为什么SQL服务器会以这种方式运行?
我有一张这样的桌子
ID nachname vorname
1 john doe
2 john doe
3 jim doe
4 Michael Knight
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,它将返回具有相同nachname和vorname的记录中的所有字段(select*)(在本例中为记录1和2).谁能帮我这个?谢谢
为什么此查询返回0行?
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t
where t.f1<>t.f2;
Run Code Online (Sandbox Code Playgroud)
这是我所拥有的复杂查询的简化版本.我想比较两个包含一对一相关数据的表,并且我想选择那些包含某些字段的不同值的行.但也可能存在其中一个表中缺少一行的情况.LEFT JOIN正确地返回这些行的空值,但是,WHERE子句错误地(或意外地)过滤掉这些行.
为什么 - 在这种情况下 - 'null'与任何非空值(如'a')不同?
让我疯狂的是这个
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t;
Run Code Online (Sandbox Code Playgroud)
返回1行(正如我所料)但是这一点
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t
where t.f1=t.f2;
Run Code Online (Sandbox Code Playgroud)
返回0行!! 所以null不等于'a',null与'a'不同!!
请...有人可以解释一下吗?
我有一张customers桌子,Customer作为模特。我正在尝试获取ID为1的客户类别以外的所有客户。customer_category_id可以为空。
我有以下查询。
Customer::where('customer_category_id', '!=', 1)->with('customerMeta')->get();
Run Code Online (Sandbox Code Playgroud)
上面的查询不会为客户提供空的客户类别ID。请问是什么原因?
我需要类别为null或类别不等于1的所有客户
任何形式的建议,表示赞赏。