如何编写此方案的SQL查询?

时间:2018-08-25 07:18:19

标签: mysql

面试官问我这个问题, 您将获得两个表,其中表1的列为L1,T1,而表2的列为T,Name。编写SQL查询以获得所需的结果。 enter image description here

我仍然停留在如何编写查询以获取所需输出的问题上。

使用了SELECT table1.L1, table2.Name FROM table1 INNER JOIN table2 on table1.T1 = table2.T;,但是这样不会将名称wrt L1的输出CONCAT。

感谢您的提前帮助。

4 个答案:

答案 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