【问题标题】:MySql: Check where clause for all row returned by an inner joinMySql:检查内部连接返回的所有行的where子句
【发布时间】:2020-02-08 14:35:42
【问题描述】:

我有这个问题

SELECT *
FROM posts
INNER JOIN categories ON categories.post_id = posts.id
INNER JOIN tags ON tags.category_id = categories.id
WHERE tags.title = 'week_trend'

每个帖子都有多个类别,每个类别也有多个标签,我需要具有带有指定标签的类别的帖子,但所有帖子类别都应该有这个条件,即使其中一个类别不符合条件,帖子也应该不包括在内。即使其中一个类别具有指定的标签,我的查询也会返回帖子。

我几乎不知道该怎么做 tnx 有人能帮我吗

【问题讨论】:

  • 在加入帖子和类别时,您不应该指定帖子中的列和类别中的列吗?您正在从类别中指定 2 列。
  • 是的,谢谢,但它只是一个用于呈现我的问题的代码,没什么大不了的
  • 没什么大不了的?如果您发布不正确的代码,我看不出任何人可以提供帮助。
  • 您对您想要的东西的描述难以理解。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。描述结果:说足够多的人可以离开并带着解决方案回来。在给出业务关系(船舶)/关联或表(基础或查询结果)时,说明其中的一行根据其列值说明了业务情况。请参阅 How to Ask、其他 help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL 的 SQL,其中包括约束、索引和表格初始化。 Why is “Can someone help me?” not an actual question?

标签: mysql inner-join where-clause


【解决方案1】:

这个查询:

SELECT c.post_id
FROM categories c INNER JOIN tags t
ON t.category_id = c.id
GROUP BY c.post_id
HAVING COUNT(DISTINCT c.id) = SUM(t.title = 'week_trend')

返回所有类别与标题为'week_trend' 的标签相关的所有post_ids。
IN 子句一起使用:

SELECT *
FROM posts 
WHERE id IN (
  SELECT c.post_id
  FROM categories c INNER JOIN tags t
  ON t.category_id = c.id
  GROUP BY c.post_id
  HAVING COUNT(DISTINCT c.id) = SUM(t.title = 'week_trend')
)

【讨论】:

  • This HAVING COUNT(DISTINCT c.id) = SUM(t.title = 'week_trend') 非常感谢。
猜你喜欢
  • 2017-09-06
  • 2012-09-04
  • 2011-12-02
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多