Join Query返回空结果,意外结果

Abs*_*Abs 2 mysql sql

任何人都可以解释为什么此查询返回空结果.

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标签表中是链接的.

And*_*mar 6

不太可能有一行其标签等于'干净'和'简单':)

所以尝试用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将确保找到两个标签.