SELECT firstname, lastname, id
FROM contact
WHERE id IN
(SELECT contactid
FROM taglist
WHERE contactid IN
(SELECT contactid
FROM customerlist
WHERE companyid = 1) AND (tagid = 1 OR tagid = 4))
我上面有一个查询,其中有一个表具有userid和tag id。每个用户可以拥有多个标签,这些标签在此表中列为单独的条目。
我需要能够只选择具有两个或更多指定标签的用户。我认为上面的查询会执行此操作,但它会返回标记为1或标记为4的每个用户。
如果我将其更改为:( tagid = 1 AND tagid = 4))我得到0结果,因为它只查看每个单独的条目,并且没有条目每个用户有多个标记。
此示例仅选择了两个标记,但此处的目标是允许最终用户选择任意数量的可用标记,并仅显示用户匹配所有选定标记的结果。
我无法知道将要选择匹配的特定数量的标签。目前有20个可用标签,客户可以根据需要添加自己的标签。
那么我该如何做到这一点?我是SQL查询的新手,并不熟悉连接,所以我认为这将与它有关,但我不知道。任何朝着正确方向的推动都会非常感激。
答案 0 :(得分:0)
您可以通过以下方式获取带有两个标签的联系人:
SELECT contactid
FROM taglist
WHERE tagid IN (1, 4)
GROUP BY contactid
HAVING COUNT(*) = 2;
你的查询的其余部分正在做你问题中未提及的其他内容,因此不清楚你真正想要的是什么。显然,您可以将其用作子查询来获取完整的contact
信息。