2015-10-05 36 views
0

有沒有辦法從MySQL中的兩個表中選擇所有列,但只有在結束列中顯示數據(如果在兩個表中找到匹配項),纔有辦法?MySQL加入顯示所需的輸出

例如...

主表(觸點)

id| token | Name 
------------------ 
1 | ABC | Test person 1 
2 | DEF | Test person 2 
3 | GHI | Test person 3 

訂閱表(訂閱)

id| contact_token 
------------------- 
1 | ABC 

希望的輸出

id| token | Name   | contact_token 
------------------------------------------ 
1 | ABC | Test person 1 | ABC 
2 | DEF | Test person 2 | 
3 | GHI | Test person 3 | 

Co的含量ntact_token顯示(ABC),因爲它出現在兩個表中。

謝謝

回答

0

是的。這是左連接的用途: 您從表聯繫人中選擇所有記錄,並在訂閱的聯繫人上執行左連接。

SELECT subscribed.id,token,name,contact_token 
FROM contacts LEFT JOIN subscribed 
ON contacts.id = subscribed.id; 

對於僅在第一個表中的記錄,您將在最後一列中獲得NULL。

+0

你會想爲LEFT JOIN的條件! – Arth

+1

@位置,ups!我在查詢中忘記了一步:)謝謝,我正在修復! –

+0

這兩個表都有一個id字段,您需要限定選擇列表中的id字段,否則會出現錯誤。然後我們的sql語句將完全相同:) – Shadow

0

除非每個用戶可以有多個訂閱,否則您應該考慮將訂閱數據存儲在主要聯繫人表中。如果後者是這種情況,那麼你必須考慮是否希望在輸出或多行中的一行內看到訂閱令牌。

的基本查詢很簡單,你需要離開加入訂閱表聯繫人:

select contacts.id, token, name, contact_token 
from contacts left join subscribed 
on contacts.id=subscribed.id 
+0

這並非總是如此。在許多情況下,對使用較少數據的訂閱查詢執行查詢會更快。這取決於很多因素,但這不是OP要求的。 –

+0

我寫了「你應該考慮」。我不知道這個表達是「永遠是真的」synonim。 – Shadow