Mysql选择。仅选择实体!=多个值的行

时间:2013-09-26 17:33:50

标签: mysql

您好,我想知道是否有人能够帮助我查询。我试图从EAV类型表中选择值不是多个值。

使用下面的示例我正在尝试检索tag_id!= 1和tag_id!= 2的行。因此,根据我想要返回的数据,只返回包含contact_id 3的行

Tags Table:

contact_id     tag_id 
  1             1
  1             2
  2             1
  2             4
  3             4

希望的结果是返回一行:

contact_id -> 3

我已经尝试过以下查询,这些查询不返回我要查找的内容,因此显然不正确:

select `contact_id` from `contact_tags` where tag_id !=1 and tag_id != 2

select `contact_id` from `contact_tags` where tag_id NOT IN(1,2)

对此有任何帮助。或者只是一个正确方向的指针会很棒。

3 个答案:

答案 0 :(得分:2)

您可以使用NOT EXISTS(),其中的语句会选择标记为12的所有记录。

SELECT  contact_id
FROM    contact_tags a
WHERE   NOT EXISTS
        (
            SELECT  1
            FROM    contact_tags b
            WHERE   tag_id IN (1, 2) AND
                    a.contact_id = b.contact_id
        )
GROUP   BY contact_id

另一种选择是使用LEFT JOIN

SELECT  a.contact_id
FROM    contact_tags a
        LEFT JOIN contact_tags b
          ON a.contact_id = b.contact_id AND
              b.tag_id IN (1, 2)
WHERE   b.contact_id IS NULL

答案 1 :(得分:1)

可能这就是你想要的

select contact_id 
from contact_tags 
where contact_id not in (
    select contact_id from contact_tags where tag_id in (1,2)
) tmp

答案 2 :(得分:0)

从@ 491243窃听这里是一个修改,返回缺少tags_id的contacts_id

http://sqlfiddle.com/#!2/b2b11/19