2

如果我有这样的表 t:

id      date_from    date_to    n_n     n_d     i_s ...
591     2014-04-26   2014-05-03 1       NULL    1   ...
595     2014-04-26   2014-05-03 1       NULL    1   ...

我有一个这样的查询:

SELECT id
FROM t
WHERE ROW(date_from, date_to, n_n, n_d, i_s) = 
(SELECT date_from, date_to, n_n, n_d, i_s FROM t WHERE id = 591);

我希望结果是一个具有两个 id 591 和 595 的 id 列。但我得到一个空结果。这有什么问题?

我需要做的:找出在某些列上相等的所有行的 id。

4

3 回答 3

2

那是因为NULL比较。通常,NULL不能使用通常的相等比较运算符来处理。有这样IS NULL的事情。但在您的情况下,请使用<=>进行查询以获得正确的结果:

SELECT id
FROM t
WHERE ROW(date_from, date_to, n_n, n_d, i_s) <=> 
(SELECT date_from, date_to, n_n, n_d, i_s FROM t WHERE id = 591);
于 2013-11-08T12:07:24.160 回答
1

它不起作用,因为一列包含null. 比较结果unknownfalse。这就是为什么你没有得到结果。

于 2013-11-08T12:04:10.190 回答
0

您应该IFNULL对期望值的每一列使用NULL,例如:

SELECT id
FROM t
WHERE ROW(date_from, , date_to, n_n, IFNULL(n_d, 0), i_s) = 
(SELECT date_from, date_to, n_n, IFNULL(n_d, 0), i_s FROM t WHERE id = 591);
于 2013-11-08T12:06:22.610 回答