gpt4 book ai didi

MySQL 左连接和排除值

转载 作者:行者123 更新时间:2023-11-29 13:47:49 25 4
gpt4 key购买 nike

更新

sqfiddle中有一个数据库模型:http://sqlfiddle.com/#!2/8dbb0/10

我根据注释更新了问题。

原帖我有三张 table :

帖子
标签
标记到帖子

假设用户 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

所以应该只留下post id 3。

首先我尝试使用 where 语句,例如:

WHERE tags.id = 1 AND tag_to_post.user_id != '2'

但这当然不排除 post_id 1,因为它是重复的。我认为WHERE子句之前应该有一个DISTINCT或GROUPED BY,但这似乎是不允许的。那么唯一的方法是子查询吗?到目前为止我还没有找到解决方案。有什么想法吗?

最佳答案

如果我理解正确的话,这看起来像是一个直接的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

An SQLfiddle to test with .

关于MySQL 左连接和排除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17157503/

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