[英]FULL OUTER JOIN or UNION?
困惑如何實現這一點可能與FULL OUTER或UNION。 我想以這樣的方式加入結果
Table1 Table2
--------------- -----------------
ID Name Salary ID Fruits
--------------- -----------------
1 John 1000 1 Apples
1 Henry 4000 1 Mangoes
1 Smith 1000 1 Tomatoes
結果應該是
ResultTable
------------------------
ID Name Salary Fruits
-----------------------
1 John 1000 Apples
1 John 1000 Mangoes
1 John 1000 Tomatoes
1 Henry 4000 Apples
1 Henry 4000 Mangoes
1 Henry 4000 Tomatoes
1 Smith 1000 Apples
1 Smith 1000 Mangoes
1 Smith 1000 Tomatoes
您需要笛卡爾產品加入或交叉加入..
SELECT
*
FROM
table1, table2
要么
SELECT
*
FROM
table1 CROSS JOIN table2
(參考: http : //publib.boulder.ibm.com/iseries/v5r2/ic2924/index.htm?info / sqlp / rbafymstcrojo.htm )
如果db2有它,請使用cross join
您可能想要重新考慮您的數據庫命名標准 - 將列命名為“ID”,但允許重復不是一個好主意恕我直言。
由於重復,不太清楚需要什么,但假設ID是紅鯡魚,我認為CROSS JOIN是你方案中的正確方法
select t1.ID, t1.Name, t1.Salary, t2.Fruit
from Table1 t1, Table2 t2
要么
select t1.ID, t1.Name, t1.Salary, t2.Fruit
from Table1 t1 CROSS JOIN Table2 t2
正如其他答案所說,如果你想要Table2中的所有行表2中的所有行,那么交叉連接(即笛卡爾連接)就是答案。
另一方面,在上面的場景中,ID上的內部聯接也將返回相同的結果集:
select t1.ID, t1.Name, t1.Salary, t2.Fruit
from Table1 t1 join Table2 t2 on t1.id = t2.id
然后,如果此查詢與某些Crystal問題存在相同的問題,您可能會發現此結果集更有用:
ResultTable
------------------------
ID Name Salary Fruits
-----------------------
1 John 1000
1 Henry 4000
1 Smith 1000
1 Apples
1 Mangoes
1 Tomatoes
可以使用此查詢獲得:
select ID, Name, Salary, '' Fruit from Table1 union all
select ID, '' Name, NULL Salary, Fruit from Table2
使用CROSS JOIN
:
SELECT T1.Name, T1.Salary, T2.Fruit
FROM Table1 AS T1
CROSS JOIN Table2 AS T2;
避免使用固定符號:
SELECT T1.Name, T1.Salary, T2.Fruit
FROM Table1 AS T1, Table2 AS T2;
我不太清楚為什么但是民間肯定不喜歡加密的符號,特別是當你添加一個WHERE
子句時。 他們會告訴你CROSS JOIN
是SQL-92,這確實是正確的,但是后面的輸入符號也是SQL-92。
哦,有些人把沒有WHERE
子句的加密符號稱為笛卡兒積,這確實是正確的,但是CROSS JOIN
也是笛卡爾積。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.