我有这样的表
表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
所以,这里的任何人都可以帮我解决这个问题吗?
答案 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的目的相反。