簡體   English   中英

使用1個查詢使用MySQL連接3個表

[英]Joining 3 tables with mySQL with 1 query

在不同的情況下已經有人問過並回答了這個問題,但是我所看到的一切並不能解決我的問題。

問題:我需要3個表,同時需要從中提取數據以進行比較和檢索信息。 所有3個表均包含“電子郵件”列。 現在,根據用戶的狀態,來自表1的用戶電子郵件可以與表2和表3中的同一用戶的電子郵件匹配。 或者來自table1的電子郵件將僅與table2或table3中的電子郵件匹配,這再次取決於用戶的狀態。 例如,用戶可能具有紅色狀態(用戶將在表2中顯示),藍色狀態(用戶將在表3中顯示)或紅色和藍色(用戶將在表2和表3中同時顯示)。

需要:來自表1的電子郵件需要與表2和表3中的電子郵件進行比較,並返回給定用戶的區域值,該值記錄在表2和表3中,但不在表1中。 我知道。 令人愉快的數據架構! 無論哪種方式,我都能夠非常成功地將table1 JOIN到table2,但是我不確定如何用table3 JOIN

這是對2個表的查詢:

SELECT * FROM table1
INNER JOIN table2
ON table2.email = table1.email
WHERE month = 'numberHere' ORDER BY submitdate DESC

當我簡單地添加另一個INNER JOIN我的代碼不會說每句話,但它也不會給我顯示任何行。 因此,盡管網絡上有許多可用的示例,但下面的代碼無法使用:

SELECT * FROM table1
INNER JOIN table2
ON table2.email = table1.email
INNER JOIN table3
ON table3.email = table2.email
WHERE month = 'numberHere' ORDER BY submitdate DESC

您需要使用LEFT JOIN ,以便即使表之一中沒有匹配的行,連接也將成功。

SELECT * FROM table1
LEFT JOIN table2
    ON table2.email = table1.email
LEFT JOIN table3
    ON table3.email = table2.email
WHERE month = 'numberHere'
    AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)
ORDER BY submitdate DESC

其他條件過濾掉兩個表中都不匹配的行。

為了匹配從該行table1在任何情況下,只有當它們是其他表中的行,你必須使用LEFT JOIN ,加入table2table3table1 (不table2table1table3tabel2 ):

SELECT * FROM table1
LEFT JOIN table2
ON table2.email = table1.email
LEFT JOIN table3
ON table3.email = table1.email

這樣,即使其他表中沒有匹配項,您也可以從table1選擇值。

查看有關SQL連接的更多信息: 不同的SQL連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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