如果我有这样的表格:
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。
答案 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);