2015-10-05 51 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