加入两个表而不重复

时间:2014-09-29 01:03:25

标签: sql firebird

我有这样的表

表1:

ID        NAME
001       John

表2:

ID        NAME          FAMILY
001       John          Kate
001       John          Jane

表3:

ID        NAME          TRAINING
001       John          ERP
001       John          CCNA
001       John          Java

我想加入这些表并显示如下数据:

加入表:

ID        NAME         FAMILY          TRAINING
001       John         Kate            ERP
001       John         Jane            CCNA
001       John                         Java

有人可以帮我找一个SQL语句,以便我可以得到那个结果吗?

我尝试像这样使用UNION

SELECT table1.ID, table1.name, table2.family, null as training
FROM table1 INNER JOIN table2 ON table1.ID = table2.ID

UNION

SELECT table1.ID, table1.name, null as family, table3.training
FROM table1 INNER JOIN table2 ON table1.ID = table3.ID

我的结果是这样的:

ID        NAME         FAMILY          TRAINING
001       John         Kate            NULL
001       John         Jane            NULL
001       John         NULL            Java
001       John         NULL            CCNA
001       John         NULL            ERP

但是,我希望得到这样的结果

ID        NAME         FAMILY          TRAINING
001       John         Kate            ERP
001       John         Jane            CCNA
001       John         NULL            Java

所以,这里的任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

不要认为这可以通用方式完成。没有办法将Training连接到Family,2之间没有任何联系.Kate与ERP无关,可以像CCNA或Java一样轻松。因此,您将获得6个结果:John-Kate-3训练,John-Jane-3训练。 (从逻辑上讲,这是正确的结果) 如果你真的想要你提到的结果,而我想不出你为什么会这样做,你必须编写一个非泛型查询。这可能是: 首先选择约翰,凯特和(随机?)训练(前1名,或其他什么,我不熟悉火鸟) 然后为Jane选择相同的内容 最后选择John,NULL和剩余训练。

就像我说的那样,这将是一个非泛型查询,你在where子句中使用值“Kate”和“Jane”。

如果我在哪里,我会对整个设置有一些深刻的想法,以及你想要完成的事情。您正在尝试使用SQL来执行它从未打算做的事情,事实上,它与SQL的目的相反。