簡體   English   中英

最好在 SQL 連接中獲取非空列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM