[英]Self-join with distinct values
我有這張桌子:
name code value
--------------------------
| john | 0001 | 1 |
| mary | 0001 | 2 |
| mary | 0002 | 3 |
我想要實現的是一個如下所示的結果集:
name code value
--------------------------
| john | 0001 | 1 |
| john | 0002 | NULL |
| mary | 0001 | 2 |
| mary | 0002 | 3 |
換句話說,我希望結果包含john
的code
為0002
的行,表中缺少該行。
我本以為會有這樣的事情讓我更接近:
with x as (select distinct code from t)
select * from t left join x on x.code = t.code
但我得到的基本上是同一張桌子:
name code value value1
-------------------------- --------
| john | 0001 | 1 | 1 |
| mary | 0001 | 2 | 2 |
| mary | 0002 | 3 | 3 |
一些額外的想法讓我得出結論,我的解決方案無論如何都無法工作,因為name
也可能是NULL
,我真的需要它出現。
我很難過,這看起來比實際上容易。
任何人都能解釋一下嗎?
您還應該使用NAMES
派生表,因為在您的方法中,它應該與它的相反(無論是右連接還是用x替換t)都不會返回值的空值。
因此,您首先必須創建一個包含NAME|CODE
所有可能選項的派生表,然后將其連接到原始表。
SELECT t1.code,t2.name,t.value
FROM(SELECT DISTINCT code FROM t) t1
CROSS JOIN(SELECT DISTINCT name FROM t) t2
LEFT JOIN t
ON(t2.name = t.name and t1.code = t.code)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.