讨论数量:
这种直接用联表查询就可以了。
假设 users
表结构如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 主键 |
user_id | int | 用户ID |
user_name | varchar | 用户名 |
user_groups
表结构如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 主键 |
user_id | int | 用户ID |
group_id | int | 分组ID |
查询不在分组表中的用户,转换成联表描述就是:在 users
表中但是不在 user_groups
表中的数据。如下图所示:
查询 SQL 如下:
SELECT
t1.*
FROM
users t1
LEFT JOIN user_groups t2 ON t1.user_id = t2.user_id
WHERE
t2.id IS NULL
select * from user where not exists (select * from user_group where user_group.user_id = user.id)
- 用户表ID字段自增 自带索引
- 用户分组表(user_group) 给user_id单独加上索引
这种直接用联表查询就可以了。
假设 users
表结构如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 主键 |
user_id | int | 用户ID |
user_name | varchar | 用户名 |
user_groups
表结构如下:
字段 | 类型 | 描述 |
---|---|---|
id | int | 主键 |
user_id | int | 用户ID |
group_id | int | 分组ID |
查询不在分组表中的用户,转换成联表描述就是:在 users
表中但是不在 user_groups
表中的数据。如下图所示:
查询 SQL 如下:
SELECT
t1.*
FROM
users t1
LEFT JOIN user_groups t2 ON t1.user_id = t2.user_id
WHERE
t2.id IS NULL
其实这种片段式代码,问AI是最好的 www.aiznx.com/#/detail/codeSnippet...
你可以试试使用LEFT JOIN和IS NULL来查询未分组的用户,只需一次查询即可。示例代码如下:
SELECT u.user_id, u.user_name
FROM 用户表 u
LEFT JOIN 用户分组表 g ON u.user_id = g.user_id
WHERE g.user_id IS NULL;
这个查询将返回所有没有在用户分组表中的用户。使用LEFT JOIN可确保在用户表中的所有用户都被包含在结果集中,无论它们是否在用户分组表中。如果用户未分配到任何分组,则在用户分组表中找不到相关记录,因此使用IS NULL来筛选这些用户。
这个查询效率更高,只需一次查询即可返回结果。
这种直接用联表查询就可以了。
假设
users
表结构如下:user_groups
表结构如下:查询不在分组表中的用户,转换成联表描述就是:在
users
表中但是不在user_groups
表中的数据。如下图所示:查询 SQL 如下: