表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子句中。
答案 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;