输入两个表,TABLE_A
和TABLE_B
TABLE_A TABLE_B
A_ID | A A_ID | B
1 | a 1 | b
2 | a1 1 | b1
3 | a2 2 | b2
期待输出TABLE C
TABLE_C
A_ID | A | C
3 | a2 | NULL <--- NULL if no matched A_ID in TABLE B
1 | a | b,b1 <--- Concat all rows in TABLE B with ','
2 | a1 | b2
以下代码几乎可以给上面的TABLE_C
,除了我想先用C
和NULL
对DESC
字段进行排序。 ORDER BY C IS NULL DESC
似乎不起作用。请注意,如果C
是NULL
,则TABLE_C将按A_ID排序,无论字段C
中的值如何。
SELECT
A1.A_ID,
A1.A,
GROUP_CONCAT(B1.B SEPARATOR ',') as 'C'
FROM `TABLE_A` A1
LEFT JOIN `TABLE_B` B1
ON A1.A_ID=B1.A_ID
GROUP BY A1.A_ID, A1.A;
以下SQL给出了错误。
SELECT
A1.A_ID,
A1.A,
GROUP_CONCAT(B1.B SEPARATOR ',') as 'C'
FROM `TABLE_A` A1
LEFT JOIN `TABLE_B` B1
ON A1.A_ID=B1.A_ID
GROUP BY A1.A_ID, A1.A
ORDER BY C IS NULL DESC, A1.A_ID; <--- Order by C with NULL failed.
不支持参考'C'(参考组功能)
首先按Null值,然后按A1.A_ID使用:
SELECT A1.A_ID, A1.A, GROUP_CONCAT(B1.B SEPARATOR ',') as C
FROM `TABLE_A` A1
LEFT JOIN `TABLE_B` B1 ON A1.A_ID=B1.A_ID
GROUP BY A1.A_ID, A1.A
ORDER BY (CASE WHEN GROUP_CONCAT(B1.B SEPARATOR ',') IS NULL then GROUP_CONCAT(B1.B SEPARATOR ',') ELSE A1.A_ID END) ;
关于错误Reference 'C' not supported (reference to group function)
你应该由'C'
订购即
ORDER BY 'C' IS NULL DESC, A1.A_ID;
而不是ORDER BY C IS NULL DESC, A1.A_ID;
你不能按顺序使用Is Null
SELECT
A1.A_ID,
A1.A,
GROUP_CONCAT(B1.B SEPARATOR ',') as 'C'
FROM `TABLE_A` A1
LEFT JOIN `TABLE_B` B1
ON A1.A_ID=B1.A_ID
GROUP BY A1.A_ID, A1.A
ORDER BY C, A1.A_ID DESC