簡體   English   中英

MySQL連接在多個列上

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

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