gpt4 book ai didi

sql - 连接查询返回空结果,意外结果

转载 作者:行者123 更新时间:2023-11-29 01:12:32 25 4
gpt4 key购买 nike

谁能解释为什么这个查询返回空结果。

SELECT *
FROM (`bookmarks`)
JOIN `tags` ON `tags`.`bookmark_id` = `bookmarks`.`id`
WHERE `tag` = 'clean'
AND `tag` = 'simple'

在我的书签表中,我有一个 id 为 70 的书签,在我的标签表中,我有两个标签“clean”和“simple”,它们都有列 bookmark_id 为 70。我以为会返回一个结果?

我该如何解决这个问题,以便在书签带有“干净”和“简单”标签时返回书签?

感谢大家对此的任何解释和解决方案。

更新

我的标签表包含很多标签。一个书签可以有很多标签。 bookmarks表中的id和tags表中的bookmark_id是关联的。

最佳答案

不太可能有一行的标签既等于“干净”又等于“简单”:)

所以尝试用 OR 替换 AND:

WHERE `tag` = 'clean'
OR `tag` = 'simple'

如果您打算只检索具有两个标签的书签,请考虑使用双重 exists 子句:

SELECT *
FROM bookmarks b
WHERE EXISTS (
SELECT *
FROM tags t
WHERE t.tag = 'simple'
AND t.bookmark_id = b.id
) AND EXISTS (
SELECT *
FROM tags t
WHERE t.tag = 'clean'
AND t.bookmark_id = b.id
)

也可以使用 having 语句进行检查:

SELECT    b.id
FROM bookmarks b
JOIN tags t
ON t.bookmark_id = b.id
AND t.tag in ('clean','simple')
GROUP BY b.id
HAVING COUNT(distinct t.tag) = 2

count 将确保找到两个标签。

关于sql - 连接查询返回空结果,意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576263/

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