我有两个表,分别命名为supplier和contacts。
contact表中的数据对应于supplier表中的记录。
供应商资料
| 识别码|名称名称名称|
| - -|- -|
| 一个|幽门螺杆菌|
| 2个|华为公司|
联系人的数据
| 标识符|供应商ID|联络人|
| - -|- -|- -|
| 一个|一个|若翰|
| 2个|一个|史密斯公司|
| 三个|一个|威尔|
| 四个|2个|多伊|
| 五个|2个|威克|
现在,我想进行一个查询,该查询应返回以下结果
| 识别码|名称名称名称|联络人|
| - -|- -|- -|
| 一个|幽门螺杆菌|约翰史密斯威尔|
| 2个|华为公司|多伊威克|
或者应该返回以下结果
| 识别码|名称名称名称|联络人|联络人|联络人|
| - -|- -|- -|- -|- -|
| 一个|幽门螺杆菌|若翰|史密斯公司|威尔|
| 2个|华为公司|多伊|威克||
2条答案
按热度按时间voj3qocg1#
你可以使用MySQL的
GROUP_CONCAT
聚合函数来得到你的第一个输出表。它自己的ORDER BY
子句允许你检查行的连接顺序。您可以使用窗口函数
ROW_NUMBER
,通过对供应商进行分区,为Contact表中的每一行分配一个等级。然后使用IF
语句将联系人拆分为三列,该语句将检查等级的三个可能值。MAX
聚集函数将允许您删除空值。如果每个供应商有三个以上的客户,则第二个查询可能不起作用。在这种情况下,您可以修改查询以包含可能的最大供应商数量,或者使用预准备语句。如果确实需要这样的解决方案,请在下面留下注解。
为了更好地理解,您可以使用这些解决方案here。第一个解决方案适用于任何MySQL版本,而第二个解决方案适用于MySQL 8。
aydmsdu92#
查询以显示所需的表: