gpt4 book ai didi

mysql - 如何在 INNER JOIN 中使用 IN() 子句?

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:35 25 4
gpt4 key购买 nike

这是我的查询:

SELECT p.*
FROM posts p
INNER JOIN pivot pi on p.id = pi.post_id
INNER JOIN tags t on t.id = pi.tag_id and t.name = "mysql"

我想要做的就是获取带有特定标签的帖子。在上面的查询中,我选择了所有带有 mysql 标签的帖子。


现在我需要让它适用于多标签。我的意思是,我想选择所有标记有 mysqlphp 的帖子。我想我必须在查询中使用 IN() 子句。但我不知 Prop 体如何。有什么想法吗?


EX:这是我的表格:

// posts
+----+---------+------------+
| id | subject | body |
+----+---------+------------+
| 1 | sub1 | content1 |
| 2 | sub2 | content2 |
+----+---------+------------+

// tags
+----+--------+
| id | name |
+----+--------+
| 1 | mysql |
| 2 | php |
+----+--------+

// pivot
+---------+--------+
| post_id | tag_id |
+---------+--------+
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
+---------+--------+

[mysql] 的预期结果:

| 1  | sub1    | content1   |
| 2 | sub2 | content2 |

[mysql][php] 的预期结果:

| 2  | sub2    | content2   |

最佳答案

我会为条件使用 WHERE 子句,然后进行聚合:

SELECT p.*
FROM posts p INNER JOIN
pivot pi
ON p.id = pi.post_id INNER JOIN
tags t
ON t.id = pi.tag_id
WHERE t.name IN ('mysql', 'php')
GROUP BY p.id
HAVING COUNT(*) = 2; -- this is the number of tags in the list

这假定标签不重复。

有关将 GROUP BY p.idSELECT p.* 一起使用的注意事项。假设 p.idposts 中是唯一的,这实际上是有效的并被 ANSI 标准所允许。具体规则基于函数依赖。

我确实认为最新版本的 MySQL 默认情况下不允许该构造。您可以随时执行以下操作:

SELECT p.*
FROM posts p JOIN
(SELECT pi.post_id
FROM pivot pi INNER JOIN
tags t
ON t.id = pi.tag_id
WHERE t.name IN ('mysql', 'php')
GROUP BY p.id
HAVING COUNT(*) = 2 -- this is the number of tags in the list
) t
ON p.id = t.post_id ;

关于mysql - 如何在 INNER JOIN 中使用 IN() 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com