sql - 选择匹配多个标签的项目

标签 sql mysql many-to-many

这看起来很基础,但我想不通。

我有一个表“item_tags”,我想选择所有匹配标签 1 和 2 的项目(例如,每个项目都必须有两个标签)。

我如何在 mysql 中执行此操作?

创建表是:

CREATE TABLE `item_tags` (
  `uid_local` int(11) NOT NULL DEFAULT '0',
  `uid_foreign` int(11) NOT NULL DEFAULT '0',
  `sorting` int(11) NOT NULL DEFAULT '0',
  KEY `uid_local` (`uid_local`),
  KEY `uid_foreign` (`uid_foreign`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

谢谢!

最佳答案

使用:

  SELECT i.uid
    FROM ITEMS i
    JOIN ITEM_TAGS it ON it.uid_local = i.uid
                   AND it.uid_foreign IN (1, 2)
GROUP BY i.uid
  HAVING COUNT(DISTINCT it.uid_foreign) = 2

您需要定义 GROUP BY 和 HAVING 子句,并且不同标签 ID 的数量必须等于您在 IN 子句中指定的标签数量。

关于sql - 选择匹配多个标签的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119840/

相关文章:

sql - 在 Hana 中使用 with 子句创建表

mysql - 函数有问题

mysql - 将有关 Viewers Laravel 的数据插入 Mysql

python - Django 中的多对多查询

SELECT 语句的 SQL 别名

php - mysql - 根据 ID 和 DATE 从一个表中获取一行,如果不显示空值,则在另一个表中获取多行

mysql - 删除 MySQL 中的多行

mysql - 我可以使用一个查询来计算 SQL 中的两列吗

php - Laravel 多对多加载相关模型与计数

database-design - web2py中的多对多关系