mysql - IN 和 NOT IN 子句不适用

标签 mysql database

所以我有这个查询:

SELECT m.id, (
  SELECT GROUP_CONCAT(
    DISTINCT tag_id
    ORDER BY tag_id
    SEPARATOR '-'
  ) FROM tagging
  WHERE mng_id = m.id
  ORDER BY tag_id DESC
) as tags 
FROM product m 
    INNER JOIN tagging tg ON (m.id = tg.mng_id)
WHERE 1
  AND tg.tag_id IN (34,20) AND tg.tag_id NOT IN (42)
  AND (nme LIKE 'tomo%' OR alt_nme LIKE 'tomo%')
GROUP BY m.id

此查询应返回标签为 # 34、20 且没有标签 # 42 的记录,记录名称必须以“tomo”开头。

但由于某种原因,它不会从结果中删除带有标签 #42 的产品。任何人都可以帮助确定此查询的问题吗?

最佳答案

如果您想要标签为 34 和 20 而不是 42 的记录,请尝试如下操作:

SELECT p.id
FROM product p INNER JOIN
     tagging tg
     ON p.id = tg.mng_id
GROUP BY p.id
HAVING SUM(tg.tag_id = 34) > 0 AND
       SUM(tg.tag_id = 20) > 0 AND
       SUM(tg.tag_id = 42) = 0;

如果您想要生成的标签,只需添加 group_concat(tg.tag_id)

这似乎比你的方法更简单。

关于mysql - IN 和 NOT IN 子句不适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467704/

相关文章:

MySQL 服务器重载

database - 如何在 DynamoDB 中创建 UUID?

mysql - 如何导入在 django 中创建的 sqlite 数据库?

mysql - 查看是否至少返回一行的最快查询

mysql - 移除子级时移除父级级联类型

java - 程序关闭后事务是否结束?

android - 如何避免db not close和cursor异常

php - if isset($_POST 问题

mysql - 将 Wikipedia 导入本地 Media Wiki 会创建充满模板引用的页面

java - 如何在 Hibernate 中映射多个复合键?