面试官问我这个问题, 您将获得两个表,其中表1的列为L1,T1,而表2的列为T,Name。编写SQL查询以获得所需的结果。
我仍然停留在如何编写查询以获取所需输出的问题上。
使用了SELECT table1.L1, table2.Name FROM table1 INNER JOIN table2 on table1.T1 = table2.T;
,但是这样不会将名称wrt L1的输出CONCAT。
感谢您的提前帮助。
答案 0 :(得分:5)
您需要一个类似于GROUP_CONCAT的聚集函数来获取名称的逗号分隔结果
SELECT table1.L1,GROUP_CONCAT( table2.Name ORDER BY table2.Name ASC SEPARATOR ',')
FROM table1
INNER JOIN table2 on table1.T1 = table2.T
GROUP BY table1.L1
ORDER BY FIELD(table1.L1,'X','Y','Z')
没有聚集功能,您可以在分开的行上获得结果..而不是通过group_concat进行分组,您可以获得与同一行上一个l1相关的所有名称
答案 1 :(得分:3)
您使用JOIN(内部联接)联接两个表。然后使用GROUP BY
获取聚合数据,然后最终利用GROUP_CONCAT函数获得逗号分隔的名称。见下文:
SELECT table1.l1, GROUP_CONCAT(table2.name)
FROM table1
JOIN table2 ON table1.t1 = table2.t
GROUP BY table1.l1
答案 2 :(得分:2)
使用此查询
SELECT table1.L1, GROUP_CONCAT(table2.name separator ', ')
FROM table1 AS table1
INNER JOIN table2 as table2 ON table1.T1 = table2.t
GROUP BY table1.L1
SQL摆弄这里进行实时测试http://sqlfiddle.com/#!9/3ac3a3/1/0
答案 3 :(得分:1)
此sql将获得结果。
SELECT L1, GROUP_CONCAT(name) from Table1 INNER JOIN Table2 on T1 = T GROUP BY L1