[英]Mysql join on multiple columns
我遇到一個問題,我想通過一個ID聯接多個列。
我的第一個表格如下所示:
submitter_id reviewer_id processor_id
75 34 91
我要加入的表如下所示:
id first_name last_name
75 Bob Smith
34 Albert McDonald
91 Joe Blo
我正在嘗試創建一個查詢,該查詢將查看我的第一個表中的每個ID,然后獲取每個ID的名字和姓氏。
例如,執行此操作的查詢應返回以下內容:
[
75 => "Bob Smith",
34 => "Albert McDonald",
91 => "Joe Blo"
];
有人可以幫我構建一個可以完成此任務的查詢嗎? 謝謝!
使用不同的別名將同一張表連接3次
select t1.submitter_id, t1.reviewer_id, t1.processor_id,
t2.first_name as submitter_firstname, t2.last_name as submitter_lastname,
t3.first_name as reviewer_firstname, t3.last_name as reviewer_lastname,
t4.first_name as processor_firstname, t4.last_name as processor_lastname
from firstTable t1
left join namesTable t2 on t1.submitter_id = t2.id
left join namesTable t3 on t1.reviewer_id = t3.id
left join namesTable t4 on t1.processor_id = t4.id
我認為您實際尋找的是這樣的:
SELECT n.id, CONCAT(n.first_name, ' ', n.last_name)
FROM names n
JOIN ids i
ON n.id = i.submitter_id
OR n.id = i.reviewer_id
OR n.id = i.processor_id
GROUP BY n.id;
這僅執行一次聯接,顯示您實際需要的2列記錄並進行限制,因此用戶僅列出1次。 另外,由於如果用戶沒有名稱設置,您可能不想僅返回ID,所以您不希望左聯接。
編輯:如果需要索引,則可以根據需要創建一個索引,包括submitter_id,reviewer_id,processor_id。
您希望將所有結果集中在一個結果集中,因此可以使用UNION ALL
:
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.submitter_id
UNION ALL
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.reviewer_id
UNION ALL
SELECT p.id, CONCAT(p.first_name, ' ', p.last_name) as name
FROM person p
JOIN firstTable f
ON p.id = f.processor_id
我認為如果您打算僅對某些組使用某些條件,例如where reviewer_id > 100
,那么這是一種更好的方法。 如果沒有,先生。 埃戈爾比較干凈。
假設您需要第一個表中的一行以返回結果的一行。
SELECT tt.submitter_id , CONCAT(ta.first_name, ' ', ta.last_name) ,
tt.reviewer_id , CONCAT(tb.first_name, ' ', tb.last_name) ,
tt.processor_id , CONCAT(tc.first_name, ' ', tc.last_name)
FROM `transaction` as tt , `names` as ta , `names` as tb , `names` as tc
WHERE tt.submitter_id = ta.id AND
tt.reviewer_id = tb.id AND
tt.processor_id = tc.id
結果將是每筆交易一行中有3個ID對應的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.