您好,我想知道是否有人能够帮助我查询。我试图从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)
对此有任何帮助。或者只是一个正确方向的指针会很棒。
答案 0 :(得分:2)
您可以使用NOT EXISTS()
,其中的语句会选择标记为1
或2
的所有记录。
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