我正在尝试获取具有特定session_id
的所有行以及group_with
列中没有'3223'的行。所以我有这个SQL语句:
SELECT * FROM pr_cart WHERE session_id=203130570714 AND group_with != 3223
对我来说它看起来很好,但由于某种原因它不会返回任何东西。
在我的表中,我的条目不符合标准。即。
session_id=203130570714 | group_with=3225
应该返回。
session_id=203130570714 | group_with=NULL
应该>>返回。
<{>}
我试过了:
session_id=203130570714 | group_with=3223
代替<>
!=
NOT (group_with=3223)
如何获取指定group_with NOT LIKE '3223'
的所有行,并且session_id
3223
不同
编辑 session_id是varchar,group_with是int
答案 0 :(得分:5)
NULL
是一个特殊值,您必须特别注意:
SELECT * FROM pr_cart WHERE session_id="203130570714" AND
(group_with != 3223 OR group_with IS NULL)
基本上所有涉及NULL
作为一个操作数的操作都会产生NULL
作为结果。
SELECT NULL + 5; # NULL
SELECT NULL * 5; # NULL
SELECT NULL NOT IN (234); # NULL
SELECT 5 IN (NULL); # NULL
NULL
永远不会被解释为true
或false
,因此决定是否应该在结果集中包含某行是无用的。
每当有一个允许NULL
值的列定义时,必须特别注意这些值。
答案 1 :(得分:-1)
如果SQL Server比以下尝试: -
如果session_id和group_with的数据类型为int,则尝试使用以下脚本,
SELECT * FROM pr_cart WHERE session_id in(203130570714) AND group_with not in(3223)
如果数据类型为id varchar,请尝试以下脚本,
SELECT * FROM pr_cart WHERE session_id in('203130570714') AND group_with not in('3223')
你会得到你的输出。