更新
sqfiddle中有一个数据库模型:http://sqlfiddle.com/#!2/8dbb0/10
我根据注释更新了问题。
原帖 我有三张桌子:
帖子
标签
tag_to_post
让我们看一下用户2使用的tag_id 1.现在我想向用户2显示所有帖子,另一个用户已使用tag_id 1标记,但是到目前为止用户2尚未使用tag_id 1标记。
查询:
SELECT posts.id AS post_id, tags.id AS tag_id, tag_to_post.user_id AS
user_tagged_post
FROM posts
LEFT JOIN tag_to_post ON tag_to_post.post_id = posts.id
LEFT JOIN tags ON tags.id = tag_to_post.tag_id
WHERE tags.id =1
产生类似的东西:
post_id | tags_id | user_tagged_post
1 | 1 | 1
1 | 1 | 2
2 | 1 | 2
3 | 1 | 1
所以应该只留下帖子ID 3。
首先,我尝试使用where语句:
WHERE tags.id = 1 AND tag_to_post.user_id != '2'
但是这当然不排除post_id 1因为它是一个douplicate。我认为在WHERE子句之前应该有一个DISTINCT或GROUPED BY,但似乎不允许这样做。所以唯一的方法是子查询?到目前为止我没有找到解决方案。有什么想法吗?
答案 0 :(得分:1)
如果我理解正确,那就好像是一个直截了当的LEFT JOIN
;
SELECT t1.post_id, p.title, t1.tag_id, t1.user_id
FROM tag_to_post t1
JOIN posts p ON t1.post_id = p.id
LEFT JOIN tag_to_post t2
ON t1.tag_id = t2.tag_id AND t1.post_id = t2.post_id AND t2.user_id = 2
WHERE t1.user_id <> 2 AND t2.user_id IS NULL
答案 1 :(得分:0)
可能你需要这样的东西
SELECT posts.id, posts.title, tags.tag, tag_to_post.user_id
FROM posts
INNER JOIN tag_to_post ON tag_to_post.post_id = posts.id
INNER JOIN tags ON tags.id = tag_to_post.tag_id
WHERE tags.id = 1 AND tag_to_post.user_id <> 2
基于评论:
SELECT DISTINCT posts.id, posts.title, tags.tag, A.user_id
FROM posts
INNER JOIN tag_to_post A ON A.post_id = posts.id
INNER JOIN tags ON tags.id = A.tag_id
WHERE tags.id = 1
AND A.post_id NOT IN (SELECT post_id FROM tag_to_post WHERE tags.id = 1 AND user_id = 2)