我正在使用此查询:
SELECT GROUP_CONCAT(column1) as values FROM archive WHERE column2 IN (21, 22)
查询从Column2具有指定值之一的行返回Column1的值。
问题在于,在这种情况下,表中找不到值21。所以我需要返回一个NULL。但查询只返回找到的值。
查询正在返回:
File 1
我希望如此:
File 1, NULL
答案 0 :(得分:1)
还可以使用right outer join
,left outer join
,case
和not exists
。下面的一些例子......(带有SQL Fiddle工作示例的链接)。
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;