[英]How to get only specific record from multiple tables?
我有表 ' table1 '、' table2 '、' table3 ' 和 ' table4 '。 “table1”有一個“account”列,因為我需要從“table2”或“table3”或“table4”中獲取關於另一列“user_id”的記錄。
我正在使用查詢
SELECT *
FROM table1
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table3 ON table1.user_id = table3.user_id
使用這個我得到了很多 NULL 值,因為 table1 的每條記錄都只會在 'table2' 或 'table3' 或 'table4' 中有記錄。
目前的輸出就像 -
t1.user_id | t1.post_id | t2.token | t3.token | t4.token
1 | 1 | xyz | NULL | NULL
1 | 1 | NULL | abc | NULL
1 | 1 | NULL | NULL | etc
需要就像
t1.user_id | t1.post_id | token
1 | 1 | xyz
1 | 1 | abc
1 | 1 | etc
t2、t3 和 t4 可以有 1 個以上的列可供選擇。
使用COALESCE()
函數會簡單得多:
SELECT
t1.user_id,
t1.post_id,
COALESCE(t2.Token, t3.Token, t4.Token) AS Token
FROM table1
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table3 ON table1.user_id = table3.user_id
為此,您可以使用COALESCE()函數。
COALESCE() 函數返回列表中的第一個非空值。 例如
select COALESCE(NULL, NULL, NULL, 'abc', NULL, 'xyz');
上述查詢的結果是abc 。
更新查詢:
SELECT
t1.user_id,
t1.post_id,
COALESCE(t2.Token, t3.Token, t4.Token) AS token
FROM table1
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table2 ON table1.user_id = table2.user_id
LEFT OUTER JOIN table3 ON table1.user_id = table3.user_id
SELECT *
FROM table1 t1
INNER JOIN table2 t2 ON t1.user_id = t2.user_id
INNER JOIN table3 t3 ON t1.user_id = t3.user_id
INNER JOIN table4 t4 ON t1.user_id = t4.user_id
你可以這樣做:
SELECT
t1.user_id,
t1.post_id,
MAX(t2.token) AS token2,
MAX(t3.token) AS token3,
MAX(t4.token) AS token4
FROM table1 AS t1
LEFT OUTER JOIN table2 AS t2 ON t1.user_id = t2.user_id
LEFT OUTER JOIN table3 AS t3 ON t1.user_id = t3.user_id
LEFT OUTER JOIN table4 AS t4 ON t1.user_id = t4.user_id
GROUP BY t1.user_id, t1.post_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.