任何人都可以解释为什么此查询返回空结果.
SELECT *
FROM (`bookmarks`)
JOIN `tags` ON `tags`.`bookmark_id` = `bookmarks`.`id`
WHERE `tag` = 'clean'
AND `tag` = 'simple'
Run Code Online (Sandbox Code Playgroud)
在我的书签表中,我有一个id70 的书签,在我的标签表中,我有两个标签'干净'和'简单'都有bookmark_id列为70.我会认为结果会被返回?
如何解决这个问题,以便在标签为"干净"和"简单"时返回书签?
感谢大家对此的任何解释和解决方案.
我的标签表包含许多标签.书签可以包含许多标签.id在书签表和bookmark_id标签表中是链接的.
不太可能有一行其标签等于'干净'和'简单':)
所以尝试用OR替换AND:
WHERE `tag` = 'clean'
OR `tag` = 'simple'
Run Code Online (Sandbox Code Playgroud)
如果您只想检索带有两个标记的书签,请考虑双子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
)
Run Code Online (Sandbox Code Playgroud)
也可以使用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
Run Code Online (Sandbox Code Playgroud)
这count将确保找到两个标签.