作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的数据库中有两个表users
,relationships
。
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
的情况
users.is_active=1
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
请注意,users
和 relationships
中有大量行。
如果我在子查询中使用 NOT IN,则会出现性能问题。
所以我认为我必须使用外键连接,但我不知道如何准确地进行查询。
任何建议,谢谢。
谢谢。
最佳答案
尝试一下:我确信 LEFT JOIN
和 IS 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/
我是一名优秀的程序员,十分优秀!