如何将具有多行的表连接到只有一行而没有任何重复数据的表

时间:2017-07-26 23:10:31

标签: sql sql-server

我的INNER JOIN复制数据时遇到问题。我有一个故障表和一个存储图像文件路径的媒体表。

表1:错误

表2:媒体

用户将他们的错误上传到表:fault,然后最多7个图像以支持他们在table:media中的应用程序。目前,当上传5张图像时,故障数据重复5次。

SELECT * FROM fault INNER JOIN media ON media.syncReportID = fault.faultID where faultID = {0}

这没关系,但是当您内部加入某些内容时,会为连接表中的每个项目返回所有内容。

SO表明:DISTINCT-我没有例外,但它对我不起作用。

SELECT DISTINCT * FROM fault INNER JOIN media ON media.syncReportID = fault.faultID where faultID = {0}

这篇SO文章here建议:OUTER APPLYGROUP BY但老实说我不理解这些文章中的复杂语法。

有人可以建议哪种SQL命令最适合允许多个图像到一个故事的能力,而不会多次重复故事。

这可能在这里吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我怀疑你想要:

SELECT f.*, m.*
FROM fault f CROSS APPLY
     (SELECT TOP 1 m.*
      FROM media m
      WHERE m.syncReportID = f.faultID
     ) m
WHERE faultID = {0};

如果您总是希望返回一行,即使没有匹配的条目,也会使用OUTER APPLY

答案 1 :(得分:0)

您可能需要指定要区分的字段 喜欢:

 SELECT DISTINCT fault.faultId,...... FROM fault INNER JOIN media ON media.syncReportID = fault.faultID where faultID = {0}