MYSQL QUERY 具有来自单个表的多个选项

标签 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))

我有上面的查询,其中有一个包含用户 ID 和标签 ID 的表。每个用户可以有多个标签,这些标签在此表中作为单独的条目列出。

我需要能够仅选择具有两个或更多指定标签的用户。我认为上面的查询可以做到这一点,但它返回带有标签 1 或标签 4 的每个用户。

如果我将其更改为:(tagid = 1 AND tagid = 4)),我会得到 0 个结果,因为它只查看每个单独的条目,并且每个用户没有条目拥有多个标签。

此示例仅选择了两个标签,但此处的目标是允许最终用户能够选择任意数量的可用标签,并且仅显示用户匹配所有选定标签的结果。

我没有任何方法知道将选择匹配的标签的具体数量。目前有 20 个可用标签,客户可以根据需要添加自己的标签。

那么我该如何实现这个目标呢?我对 SQL 查询非常陌生,而且对连接还不太熟悉,所以我认为这与它有关,但我不知道。任何朝着正确方向的插入将不胜感激。

最佳答案

您可以通过执行以下操作获取带有两个标签的联系人:

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

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

关于MYSQL QUERY 具有来自单个表的多个选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217625/

相关文章:

mysql - 根据相关表从另一列更新一列

mysql - 尝试 JOIN 5 个表,遇到问题

mysql - sql order by 子句中的多种情况条件?

MySql 组合(嵌套)查询和使用 Join 方式的查询比单独查询慢

mysql - 在 MySQL 中指定请求中的日期范围

mysql - 如何获取具有左连接的行与两个右表行匹配MySQL中的两个单独的值?

JPA OneToMany 关系和性能

php - AJAX 不返回任何数据

mysql - 从具有不同日期布局的 mysql 数据库中按日期选择最近 7 天的 PHP 数据

php - MySQL innoDB 外键从三个表中级联删除