gpt4 book ai didi

MySQL 连接两个表而不使用 NOT IN

转载 作者:行者123 更新时间:2023-11-29 09:39:46 25 4
gpt4 key购买 nike

我的数据库中有两个表usersrelationships

CREATE TABLE users(
id int primary key auto_increment,
nickname varchar(20),
is_active TINYINT
)

CREATE TABLE relationships(
id int primary key auto_increment,
user_id int,
target_user_id int,
FOREIGN KEY(user_id) REFERENCES users(id),
FOREIGN KEY(target_user_id) REFERENCES users(id)
)
mysql> select * from users;
+----+----------+-----------+
| id | nickname | is_active |
+----+----------+-----------+
| 1 | hide | 1 |
| 2 | john | 1 |
| 3 | ben | 0 |
| 4 | test | 1 |
| 5 | gogo | 1 |
+----+----------+-----------+

mysql> select * from relationships;
+----+---------+----------------+
| id | user_id | target_user_id |
+----+---------+----------------+
| 1 | 1 | 2 |
| 2 | 1 | 4 |
+----+---------+----------------+

我必须在特定条件下提取users.id

我将解释users.id = 1的情况

  1. users.is_active=1
  2. 没有通过relationships 表建立关系的用户。您知道在当前的 relationships 表中,user_id = 1 有 2 行,即 target_user_id = 2 和 4。因此查询结果不包含user_id = 2 and 4

使用NOT IN,非常简单。

SELECT id FROM users WHERE is_active=1 AND id NOT IN(SELECT target_user_id FROM relationships WHERE user_id=1)

RESULT : 1, 5

请注意,usersrelationships 中有大量行。

如果我在子查询中使用 NOT IN,则会出现性能问题。

所以我认为我必须使用外键连接,但我不知道如何准确地进行查询。

任何建议,谢谢。

谢谢。

最佳答案

尝试一下:我确信 LEFT JOINIS NULL 方法肯定适合您

SELECT u.id 
FROM users u
LEFT JOIN relationships r ON r.target_user_id = u.id
AND r.user_id = 1
WHERE u.is_active=1 AND r.target_user_id IS NULL

关于MySQL 连接两个表而不使用 NOT IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56862050/

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