MYSQL两个表加入并得到结果基础上,并仅通过相同的字段值

问题描述:

详情:http://screencast.com/t/fTRzyqsoMYSQL两个表加入并得到结果基础上,并仅通过相同的字段值

基本上有2个MySQL表(联系人和交易),并需要获得的两个条件

的基础上的ContactID
  1. 获取的所有联系人(使用ContactID),那里是所有
  2. 没有成交仅获得那些联系人谁都有一个或多个交易记录,但所有的人都与取消状态。

帮助!?

+1

您是否要求SQL代码?你有什么尝试? – Aaron 2012-04-17 21:02:48

你可以用一个简单的LEFT连接实际完成这个...并查找NULL(未找到)。通过进行左连接,它会从左表中获取所有记录,而不管右侧是否匹配。因此,如果我们将联接条件设置为您的交易表,则取消匹配=“否”,并且我们找到匹配项,则忽略结果集中的匹配项。如果交易中没有记录,或者它们全部设置为取消=“是”,则它们被排除在联接条件之外,因此将被视为“未找到”

select 
     c.ContactID 
    from 
     Contacts c 
     LEFT JOIN Transactions t 
      on c.ContactID = t.ContactID 
      AND t.Cancelled = "yes" 
    where 
     t.contactID is null 
+0

好吧,这个工程,除了我必须改变t.Cancelled '是'才能得到正确的结果。非常感谢! – Ahmed 2012-04-17 23:56:47

+0

@Ahmed,实际上不......你想看看任何有YES的东西...如果它找到一个,那些是你想忽略的东西...因此,逻辑NEGATIVE不会找到一个并获得我开始的是NULL。如果您的取消状态全部大写,则更改为“是”或“是”,无论您的一致性值设置如何。但改为“是”却没有答案。如果某人有YES和NO,它会发现NO,包括它并且是错误的,因为在测试中没有YES。 – DRapp 2012-04-18 00:02:55

+0

执行... **从 联系人选择 c.ContactID Ç LEFT JOIN交易牛逼 上c.ContactID = t.ContactID AND t.Cancelled = “是” 其中 t.contactID为空* * 我得到3,5,6- 但是执行 **从 联系人选择 c.ContactID ç LEFT JOIN交易吨 上c.ContactID = t.ContactID 甲ND t.Cancelled =“no” 其中 t.contactID为空** 给了我期望的联系人Id结果2,4,6 有意义吗? – Ahmed 2012-04-18 00:18:40