如何在SQL中查询包含NULL结果的指定用户值?
实现指定用户列表全量返回(不存在用户字段为NULL)的SQL查询方法
要实现指定用户列表全量返回、不存在用户对应字段为NULL的需求,不能直接用WHERE IN(它只会返回原表中存在的记录),需要通过**左连接(LEFT JOIN)**结合临时用户数据集来实现,核心思路是把目标用户列表作为左表,原表作为右表做左连接,保留左表所有记录,匹配不上的右表字段自动填充NULL。
通用主流数据库写法(PostgreSQL、SQL Server等)
直接用VALUES子句构造目标用户列表:
SELECT users.target_user AS "user", t.code FROM ( VALUES ('user1'), ('user2'), ('user3'), ('user4') ) AS users(target_user) LEFT JOIN your_table t ON t."user" = users.target_user;
MySQL兼容写法(含8.0之前版本)
MySQL 8.0之前不支持直接用VALUES作为临时表,改用UNION ALL构造用户列表:
SELECT users.target_user AS `user`, t.code FROM ( SELECT 'user1' AS target_user UNION ALL SELECT 'user2' UNION ALL SELECT 'user3' UNION ALL SELECT 'user4' ) AS users LEFT JOIN your_table t ON t.`user` = users.target_user;
注意事项
- 如果
user是数据库关键字,需要用对应数据库的转义符包裹(MySQL用反引号`,PostgreSQL/SQL Server用双引号")。 - 替换
your_table为实际表名。
内容的提问来源于stack exchange,提问作者BosKo
相关产品推荐
相关产品推荐

