gpt4 book ai didi

mysql - WHERE 连接表

转载 作者:行者123 更新时间:2023-12-01 00:47:41 25 4
gpt4 key购买 nike

我基本上有一个类似于此的查询:

SELECT * FROM news
LEFT JOIN tags ON tags.newsid = news.id

现在让我们说,我想获取所有具有 tags.name 标签(tags 表中的行)的 news 行值为“test”,另一个标记为 tags.name 的值为“test2”。所以基本上,我想检查联接表中的两个值,如果它们都在其中,则返回 news 行。

这怎么可能?抱歉,如果之前有人问过这个问题,我真的不知道在搜索这个特定问题时我会使用什么样的关键字,因为它非常复杂。

最佳答案

SELECT news.*, COUNT(*) c
FROM news
INNER JOIN tags ON tags.newsid = news.id
WHERE tags.name IN ("test", "test2")
HAVING c = 2

我假设 tags.newsid, tags.name 的组合是唯一的。

以下是您如何按照评论中的要求进行操作。

SELECT news.*, COUNT(*) c
FROM news n
INNER JOIN (
SELECT tags.newsid newsid
FROM tags
WHERE tags.name = "test"
UNION ALL
SELECT DISTINCT tags.newsid
FROM tags
WHERE tags.name IN ("test2", "test3")
) t
ON t.newsid = n.id
HAVING c = 2

另一种方法是:

SELECT DISTINCT news.*
FROM news n
JOIN tags t1 ON n.id = t1.newsid
JOIN tags t2 ON n.id = t2.newsid
WHERE t1.name = "test"
AND t2.name IN ("test2", "test3")

后一种方法更容易外推到任意组合。

关于mysql - WHERE 连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772112/

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