如何使用SQL提取缺失的问题记录
查找用户未关联的问题ID
数据表结构
表1(问题表)
id | question_descr =================== 1 | blabla 2 | lorem 3 | ipsum 4 | dante 5 | alighieri
表2(用户-问题关联表)
id | user_name | question_id ============================ 1 | test_user | 2 2 | test_user | 4 3 | test_user | 5
需求
查询出test_user未关联的问题ID,预期结果如下:
user_name | question_id ============================ test_user | 1 test_user | 3
解决方案
方法1:LEFT JOIN + IS NULL
通过左连接关联两张表,筛选出关联表中无匹配记录的问题ID:
SELECT 'test_user' AS user_name, t1.id AS question_id FROM 表1 t1 LEFT JOIN 表2 t2 ON t1.id = t2.question_id AND t2.user_name = 'test_user' WHERE t2.question_id IS NULL;
方法2:NOT EXISTS
利用NOT EXISTS子查询判断当前问题ID是否未被用户关联,性能表现较好:
SELECT 'test_user' AS user_name, t1.id AS question_id FROM 表1 t1 WHERE NOT EXISTS ( SELECT 1 FROM 表2 t2 WHERE t2.question_id = t1.id AND t2.user_name = 'test_user' );
方法3:NOT IN
通过子查询获取用户已关联的问题ID,再用NOT IN排除这些ID:
注意:如果子查询返回的
question_id包含NULL值,NOT IN会导致结果为空,使用时需确保子查询结果无NULL。
SELECT 'test_user' AS user_name, t1.id AS question_id FROM 表1 t1 WHERE t1.id NOT IN ( SELECT question_id FROM 表2 WHERE user_name = 'test_user' );
内容的提问来源于stack exchange,提问作者OKMokUp12
相关产品推荐
相关产品推荐

