首页 > 解决方案 > 使用左连接从左表中选择前 50 个

问题描述

SELECT  TOP(50)  *  FROM [Cars]
LEFT JOIN [Colors] ON [Cars].[ModelId] = [Colors].[ModelId]

返回50 行,但我想要50 辆汽车,因为每辆汽车有多种颜色 Top(50) 不起作用。

标签: sqlsql-server

解决方案


如我所见,您没有使用颜色表中的任何信息。在这种情况下,您不需要加入颜色表。

SELECT  TOP(50)  *  FROM [Cars]

如果您正在寻找汽车的每种颜色,那么您可能应该对颜色和汽车一起使用列表聚合函数。假设 color 是 Colors 中的列名

SELECT  TOP(50)  *,
                 STRING_AGG([Colors].color, ',') WITHIN GROUP (ORDER BY color) AS colors
FROM [Cars]
LEFT JOIN [Colors] ON [Cars].[ModelId] = [Colors].[ModelId]

推荐阅读