显示SQL连接的重复项

时间:2015-07-28 14:55:34

标签: sql join duplicates

表1-工作

JobID
JobCustomerID
JobAddressID

表2-地址

AddressID
AStreetAddress

表3-客户

CustomerID
CustomerName

查询:

SELECT *
FROM [Jobs] 
LEFT JOIN [Addresses] ON [Jobs].JobAddressID = dbo.Addresses.AddressID  
LEFT JOIN [Customers] ON [Jobs].JobCustomerID = [Customers].CustomerID
GROUP BY AStreetAddress
HAVING (COUNT(AStreetAddress) > 1)

我正在尝试找到地址重复的作业。

错误

  

专栏Jobs.JobID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

3 个答案:

答案 0 :(得分:1)

使用group by,您可以在仅选择列的分组或聚合函数中使用:

SELECT AStreetAddress
FROM [Jobs] 
LEFT JOIN [Addresses] ON [Jobs].JobAddressID = dbo.Addresses.AddressID  
LEFT JOIN [Customers] ON [Jobs].JobCustomerID = [Customers].CustomerID
GROUP BY AStreetAddress
HAVING (COUNT(AStreetAddress) > 1)

你需要这样的东西:

SELECT [Jobs].ID
FROM [Jobs] 
LEFT JOIN [Addresses] ON [Jobs].JobAddressID = dbo.Addresses.AddressID  
LEFT JOIN [Customers] ON [Jobs].JobCustomerID = [Customers].CustomerID
GROUP BY [Jobs].ID
HAVING (COUNT(*) > 1)

答案 1 :(得分:0)

这应该适合你:

SELECT *
FROM [Jobs] 

  left JOIN [Addresses] ON [Jobs].JobAddressID = dbo.Addresses.AddressID  
  left JOIN [Customers] ON [Jobs].JobCustomerID = [Customers].CustomerID

WHERE [AStreetAddress] IN (SELECT [AStreetAddress] FROM [Addresses] GROUP BY [AStreetAddress] HAVING COUNT(*) > 1)

答案 2 :(得分:0)

重复地址?首先,客户表似乎与此问题无关。其次,您不需要left join。如果地址重复,则表之间存在匹配。第三,你有两种方法可以获得重复:地址id可以重复或地址本身。

如果你想要有重复地址的作业,我希望这样的查询:

SELECT j.JobId, a.AStreetAddress
FROM [Jobs] j JOIN
     [Addresses] a
     ON j.JobAddressID = a.AddressID  
GROUP BY j.JobId, a.AStreetAddress
HAVING COUNT(*) > 1;