SQL查询无法按预期工作(从初学者的角度来看)

时间:2014-08-07 11:14:00

标签: mysql sql

我正在尝试获取具有特定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 应该>返回。 <{>}

我试过了:

  1. session_id=203130570714 | group_with=3223代替<>
  2. !=
  3. NOT (group_with=3223)
  4. 如何获取指定group_with NOT LIKE '3223'的所有行,并且session_id

    的编号与3223不同

    编辑 session_id是varchar,group_with是int

2 个答案:

答案 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永远不会被解释为truefalse,因此决定是否应该在结果集中包含某行是无用的。

每当有一个允许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')

你会得到你的输出。