我有一个标签表 - id、name、owner_id(owner_id 是用户的 FK)
和一个 user_tags 表 - user_id, tag_id (用户之间的链接表,用于共享这些标签的标签 - 即,可以访问标签但不是所有者的用户)
我有一个查询可以通过 user_tags 表上的连接获取我的标签:
SELECT tags . *
FROM tags
JOIN user_tags ON user_tags.user_id =2
AND user_tags.tag_id = tags.id
LIMIT 0 , 30
但是在同一个查询中,我还想选择标签 WHERE tags.owner_id = 2,通过链接表(user_tags)获取与该用户共享的所有标签以及用户拥有的标签(tags.owner_id = user_id)。
如果我在加入后包含 WHERE tags.owner_id = 2,它只返回 tags.owner_id = 2 的结果。
如果我包含 OR tags.owner_id = 2,我会得到所有结果的重复。
如果我做出声明SELECT DISTINCT... OR tags.owner_id = 2
,我最终会得到正确的结果集,但我不确定这是使用条件连接的正确方法。
有没有更好的方法/最佳实践?
另外,为什么连接返回结果的倍数(即为什么是SELECT DISTINCT
或GROUP BY
必要的?
谢谢你。
结构澄清编辑