[英]Preferably get non-null columns in a SQL join
我有一個查詢從具有相同列的兩個表(TABLE_ONE 左連接 TABLE_TWO)獲取數據。 我需要從 TABLE_ONE 中獲取數據,但是如果數據為 null 而在 TABLE_TWO 中它不為空,則返回 TABLE_TWO 的列。
TABLE_ONE
數據1 | 數據2 | 數據3 | 數據4 |
---|---|---|---|
車 | 紅色的 | 4個 | |
自行車 | 藍色的 |
表_二
數據1 | 數據2 | 數據3 | 數據4 |
---|---|---|---|
車 | 西班牙 | 7 | |
自行車 | 藍色的 | 9 |
這是查詢:
select distinct *
from TABLE_ONE T1
left join TABLE_TWO T2 on T1.data1 = T2.data1
and (T1.data2 = T2.data2 OR (T1.data2 like '' OR T2.data2 like ''))
and (T1.data3 = T2.data3 OR (T1.data3 like '' OR T2.data3 like ''))
這就是我得到的:
數據1 | 數據2 | 數據3 | 數據4 | 數據1 | 數據2 | 數據3 | 數據4 |
---|---|---|---|---|---|---|---|
車 | 紅色的 | 4個 | 車 | 西班牙 | 紅色的 | 7 | |
自行車 | 藍色的 | 自行車 | 藍色的 | 9 |
這就是我需要的:
數據1 | 數據2 | 數據3 | 數據4 |
---|---|---|---|
車 | 西班牙 | 紅色的 | 4個 |
自行車 | 藍色的 | 9 |
是否可以合並具有相同名稱的列?即不同的列,但不為空,如果兩列均為空,則從 TABLE_ONE 中取一個
使用合並
Select
coalesce(t1.data1, t2.data1) Data1,
coalesce(t1.data2, t2.data2) Data2,
coalesce(t1.data3, t2.data3) Data3,
coalesce(t1.data4, t2.data4) Data4
From...
你需要一個完整的外部連接。 MySQL 不直接支持它們,但我們可以通過聯合查詢來模擬它們:
SELECT t1.data1,
COALESCE(t1.data2, t2.data2) AS data2,
COALESCE(t1.data3, t2.data3) AS data3,
COALESCE(t1.data4, t2.data4) AS data4
FROM TABLE_ONE t1
LEFT JOIN TABLE_TWO t2 ON t2.data1 = t1.data1
UNION ALL
SELECT t2.data1, t2.data2, t2.data3, t2.data4
FROM TABLE_ONE t1
RIGHT JOIN TABLE_TWO t2 ON t2.data1 = t1.data1
WHERE t1.data1 IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.