我有兩個表 T1 和 T2,都有一個欄位(id)。
T1.id has values:
1
2
4
T2.id has values:
1
3
4
我需要加入這些表。
期望的結果:
T1 | T2
------|------
1 | 1
2 | null
null | 3
4 | 4
使用 JOIN 我會很容易做到:
查詢 1
SELECT * FROM T1 FULL JOIN T2 ON T1.id=T2.id
但由于某些原因,我不能在這里使用 JOIN 。所以,用這樣一個簡單的查詢
查詢 2
SELECT * FROM T1, T2 WHERE T1.id=T2.id
我只會得到兩行資料
T1 | T2
------|------
1 | 1
4 | 4
因為另一個表中沒有匹配項,將省略另外兩行。
不管用什么來填補缺失的比賽。它可以是 NULL 或任何其他值——實際上是任何值,但我需要獲取那些省略的行。
有沒有辦法在不使用任何 JOIN 的情況下修改查詢 2 以獲得所需的結果?
PS:真實表的結構不同,所以也不允許使用UNION。
PPS:我剛剛給出了一個模型來指出問題。實際上,它是一個“大型查詢”,涉及許多表,每個表都有幾十列。
uj5u.com熱心網友回復:
FULL OUTER JOIN僅支持隱式連接時的標準實作方式。
select t1.id t1id, t2.id t2id
from t1, t2 where t1.id = t2.id
union all
select id, null from t1
where not exists (select 1 from t2 where t2.id = t1.id)
union all
select null, id from t2
where not exists (select 1 from t1 where t1.id = t2.id)
order by coalesce(t1id, t2id)
第一個SELECT產生INNER JOIN結果的一部分。
第二個SELECT將額外 LEFT OUTER JOIN的行添加到結果中。
第三個SELECT將額外 RIGHT OUTER JOIN的行添加到結果中。
一起FULL OUTER JOIN表演!
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ec154ad243efdff2162816205fdd42b5
uj5u.com熱心網友回復:
SELECT t1.id t1_id, t2.id t2_id
FROM ( SELECT id FROM table1
UNION DISTINCT
SELECT id FROM table2 ) t0
NATURAL LEFT JOIN table1 t1
NATURAL LEFT JOIN table2 t2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437056.html
上一篇:找到物品最多的位置
