订阅者依赖表mysql

时间:2014-08-22 15:06:09

标签: mysql sql

我有两个表订阅者​​和家属

 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

谢谢!

2 个答案:

答案 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

http://sqlfiddle.com/#!2/dc7ba/11

答案 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中找不到名称的订阅者。