我正在嘗試為下表撰寫一個 sql 連接查詢。
我正在嘗試獲得預期的表格。
唯一的連接條件是,如果在表1中,操作的值為'D',即洗掉,那么表2中的行的對應值應該為空。
基于鍵連接的表。
資料庫:POSTGRES
表格1
id | operation| keys|
-----------------------
1 | I | 1 |
2 | U | 2 |
3 | D | 3 |
表 2
id |keys| col1| col2
-----------------------
1 | 1 | xyz | abc
2 | 2 | yxz | cba
3 | 3 | zxy | bac
預期產出
id | operation| keys| col1| col2
---------------------------------
1 | I | 1 | xyz |abc
2 | U | 2 | yxz |cba
3 | D | 3 | NULL|NULL
uj5u.com熱心網友回復:
您可以使用CASE WHEN. 基本上,查詢將如下所示:
SELECT t1.id, t1.operation, t1.keys,
CASE WHEN t1.operation = 'D' THEN NULL ELSE t2.col1 END col1,
CASE WHEN t1.operation = 'D' THEN NULL ELSE t2.col2 END col2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
AND t1.keys = t2.keys;
我不知道您是否真的要進行左連接,或者您是否需要內連接。而且我不知道您是否會同時加入 id 和 keys 列或僅加入其中之一。所以查詢會為你的例子產生預期的結果,但是你必須檢查這些東西,拜托。最后一點:當然,您甚至可以洗掉“CASE WHEN”結構并將 != 'D' 條件放在左連接中。我沒有提出這個建議,因為“CASE WHEN”構造簡單允許您在必要時為 col1 和 col2 選擇不同的值,因此它更靈活。
uj5u.com熱心網友回復:
我認為在這種情況下,您可以只寫一個left join具有正確條件的陳述句table_1.keys = table_2.keys and table_1.operation != 'D'。這將加入第二個表,您將進入null條件所在的列false。
select t1.*, t2.col1, t2.col2 from table_1 as t1 left join table_2 as t2 on (t1.keys = t2.keys and t1.operation != 'D')
在DBfiddle上查看演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474676.html
標籤:sql PostgreSQL 加入
