使用WHERE IN返回NULL

时间:2014-07-22 14:52:51

标签: mysql

我正在使用此查询:

SELECT GROUP_CONCAT(column1) as values FROM archive WHERE column2 IN (21, 22)

查询从Column2具有指定值之一的行返回Column1的值。

问题在于,在这种情况下,表中找不到值21。所以我需要返回一个NULL。但查询只返回找到的值。

查询正在返回:

File 1

我希望如此:

File 1, NULL

2 个答案:

答案 0 :(得分:1)

还可以使用right outer joinleft outer joincasenot exists。下面的一些例子......(带有SQL Fiddle工作示例的链接)。

右外连接到临时表(选择#UNION)

SELECT GROUP_CONCAT(CASE WHEN COLUMN1 IS NULL THEN "NULL" ELSE COLUMN1 END)
FROM archive
RIGHT OUTER JOIN
  (SELECT 21 AS id
   UNION SELECT 22 AS id) AS tmp ON tmp.id=archive.column2;

SQL小提琴:http://sqlfiddle.com/#!2/805e1c/9

右外连接到第二个表

SELECT GROUP_CONCAT(
  CASE WHEN COLUMN1 IS NULL THEN "NULL" ELSE COLUMN1 END)
FROM archive
RIGHT OUTER JOIN temporary tmp ON tmp.id=archive.column2;

SQLFiddle:http://sqlfiddle.com/#!2/36fba/2

答案 1 :(得分:0)

怎么样:

SELECT column2, GROUP_CONCAT(column1) as values FROM archive WHERE column2 IN (21, 22)
       GROUP BY column2;

这将在两个不同的上产生 21 22 的结果。

请注意,如果您希望获得可预测/可重现的结果,则应向GROUP_CONCAT聚合函数提供ORDER BY子句。

如果您真的想要"在列#34;中,请尝试之类的(未经测试 - 抱歉):

SELECT * FROM 
     (SELECT GROUP_CONCAT(column1) as values FROM archive 
                                             WHERE column2 = 21 GROUP BY column2) AS A
JOIN (SELECT GROUP_CONCAT(column1) as values FROM archive 
                                             WHERE column2 = 22 GROUP BY column2) AS B;