用于查找类似行的ID的行查询

时间:2013-11-08 12:02:24

标签: mysql sql

如果我有这样的表格:

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的id列,591和595.但是我得到一个空结果。这有什么问题?

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

答案 2 :(得分: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);