我已经从Access导入了一个数据库,并且有一些列显示了一些异常行为。特定列的类型为datetime,允许使用NULL值。原始数据集有一些带有日期的行,有些带有null,我试图选择所有没有日期的行(IS NULL)并且总是返回"空集"。请原谅可怕的专栏名称,长篇故事,并查看带有三个字段PK的缩写表,然后是相关专栏:
+-----------------------------------------+-------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+-----------------------------------------+-------------+------+-----+---------+
| HID | varchar(50) | NO | PRI | NULL |
| yr | varchar(50) | NO | PRI | NULL |
| mo | varchar(50) | NO | PRI | NULL |
| wanem deit yu yu risivim ol meresin | datetime | YES | | NULL |
对它运行一个简单的查询会产生以下结果:
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" IS NOT NULL LIMIT 5;
+-----+------+----+-------------------------------------+
| hid | yr | mo | wanem deit yu yu risivim ol meresin |
+-----+------+----+-------------------------------------+
| 109 | 2010 | 01 | NULL |
| 109 | 2011 | 03 | NULL |
| 109 | 2012 | 01 | 2011-11-11 00:00:00 |
| 109 | 2012 | 02 | 2011-11-11 00:00:00 |
| 109 | 2012 | 03 | NULL |
+-----+------+----+-------------------------------------+
5 rows in set (0.00 sec)
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" IS NULL LIMIT 5;
Empty set (0.00 sec)
非常奇怪的行为,所以我想也许它可能是一个字符串,多亏了可能有错误的导入,所以我打破了书中的每个规则尝试以下,没有什么能让我获得NULL分隔的行来自那些有价值观的人。
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" = "NULL" LIMIT 5;
Empty set (0.00 sec)
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" = NULL LIMIT 5;
Empty set (0.00 sec)
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" = 0 LIMIT 5;
+-----+------+----+-------------------------------------+
| hid | yr | mo | wanem deit yu yu risivim ol meresin |
+-----+------+----+-------------------------------------+
| 109 | 2010 | 01 | NULL |
| 109 | 2011 | 03 | NULL |
| 109 | 2012 | 01 | 2011-11-11 00:00:00 |
| 109 | 2012 | 02 | 2011-11-11 00:00:00 |
| 109 | 2012 | 03 | NULL |
+-----+------+----+-------------------------------------+
5 rows in set, 1 warning (0.00 sec)
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" = "" LIMIT 5;
Empty set (0.00 sec)
mysql> SELECT hid, yr, mo, `wanem deit yu yu risivim ol meresin` FROM AP WHERE "wanem deit yu yu risivim ol meresin" = '' LIMIT 5;
Empty set (0.00 sec)
所以我有点难过。我发现了很多其他的stackoverflow文章"我如何选择空值"但没有一个"不是空的"如此奇怪地返回其中带有NULL的行(并且每次IS NULL都返回一个Empty集)。
答案 0 :(得分:5)
在 where 子句中尝试使用反向刻度而不是双引号,因为它的字段名称
SELECT hid,
yr,
mo,
`wanem deit yu yu risivim ol meresin`
FROM AP
WHERE `wanem deit yu yu risivim ol meresin` IS NULL LIMIT 5;
实际上,下面的查询不会检查NOT NULL
的 where 条件,这就是为什么它返回所有记录后,查询返回滴答而非双引号,如
SELECT hid,
yr,
mo,
`wanem deit yu yu risivim ol meresin`
FROM AP
WHERE `wanem deit yu yu risivim ol meresin` IS NOT NULL LIMIT 5;