如何编写SQL语句查询未关联任何设备的用户?
查询未拥有任何设备的用户的SQL语句
我们需要从users表中筛选出**未在devices表中出现过对应user-id**的用户,也就是没有任何设备的用户,以下是几种常用的实现方式:
方式一:LEFT JOIN + IS NULL(推荐,标准SQL语法,性能与可读性俱佳)
SELECT users.user-name FROM users LEFT JOIN devices ON users.user-id = devices.user-id WHERE devices.user-id IS NULL;
逻辑说明:LEFT JOIN会保留users表的所有记录,将其与devices表中匹配的记录关联;没有匹配到设备的用户,对应的devices表字段会为NULL,通过WHERE devices.user-id IS NULL即可筛选出目标用户。
方式二:NOT IN
SELECT user-name FROM users WHERE user-id NOT IN (SELECT DISTINCT user-id FROM devices WHERE user-id IS NOT NULL);
逻辑说明:子查询先提取devices表中所有非空的user-id(避免NOT IN遇到NULL时返回空结果),再筛选users表中不在该集合内的用户。
方式三:NOT EXISTS
SELECT user-name FROM users WHERE NOT EXISTS (SELECT 1 FROM devices WHERE devices.user-id = users.user-id);
逻辑说明:逐条检查users表的用户,若在devices表中找不到对应user-id的记录,则该用户会被选中。
与示例风格一致的旧式写法(不推荐,仅适配部分数据库)
如果你需要和提供的「拥有设备用户查询」使用相同的旧式逗号连接风格,可使用以下Oracle专属的外连接语法(其他数据库可能不支持):
SELECT users.user-name FROM users, devices WHERE users.user-id = devices.user-id(+) AND devices.user-id IS NULL;
内容的提问来源于stack exchange,提问作者derTobi
相关产品推荐
相关产品推荐

