MYSQL QUERY具有单个表中的多个选项

时间:2018-05-07 15:24:42

标签: mysql sql join

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查询的新手,并不熟悉连接,所以我认为这将与它有关,但我不知道。任何朝着正确方向的推动都会非常感激。

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式获取带有两个标签的联系人

SELECT contactid 
FROM taglist 
WHERE tagid IN (1, 4)
GROUP BY contactid
HAVING COUNT(*) = 2;

你的查询的其余部分正在做你问题中未提及的其他内容,因此不清楚你真正想要的是什么。显然,您可以将其用作子查询来获取完整的contact信息。