我有两个表订阅者和家属
Subscribers
1 John
2 Joe
3 Jean
4 Alan
5 Elena
Dependents
1 John (Same Person)
1 Betty
1 Hannah
3 Grey
4 Sumen
4 Kevin
SELECT * FROM Subscribers LEFT JOIN Dependents ON Subscribers.Id = Dependents.Id
这给了我
John, John
John, Betty
John, Hannah
Joe,
Jean, Grey
Alan, Sumen
Alan, Kevin
Elena
我需要:
John, John
John, Betty
John, Hannah
Joe
Jean (Added)
Jean, Grey
Alan (Added)
Alan, Sumen
Alan, Kevin
Elena
基本上我希望订阅者记录独立于自己,如果依赖者本身不像约翰。 Joe,Jean,Alan,Elena都会有与家属无关的记录。
我认为我需要这样的东西
SELECT * FROM SUBSCRIBERS LEFT JOIN Dependents ON Subscribers.Id = Depedents.Id
Where Subscribers.First_Name IS NOT Dependents.First_Name
谢谢!
答案 0 :(得分:1)
如果没有工会,我想不出任何办法。
SELECT S.name as subscriber, D.name as dependent FROM Subscribers S left JOIN Dependents D ON S.Id = D.Id
UNION
SELECT S.name as subscriber, D.name as dependent FROM Subscribers S left JOIN Dependents D ON S.name = D.name
ORDER BY subscriber, dependent
答案 1 :(得分:0)
您还可以使用UNION ALL like this:
SELECT s.Name AS subscriber, d.Name AS dependent
FROM Subscribers AS s
INNER JOIN Dependents AS d ON s.Id = d.Id
UNION ALL
SELECT s.Name, NULL
FROM Subscribers AS s
LEFT JOIN Dependents AS d ON s.Name = d.Name
WHERE d.Name IS NULL
ORDER BY subscriber, dependent
;
基本上,第一个SELECT通过Id
获取所有匹配,而第二个SELECT添加了dependents
中找不到名称的订阅者。