如何使用MySQL查询指定值中表内不存在的记录?
实现需求的方法
可以实现,核心思路是先把你指定的所有值构造成一个临时数据集,再和table1做左连接,这样既能返回表中已存在的记录,也能列出指定值里不存在的记录(对应name字段为NULL)。
适用于支持CTE(公共表表达式)的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
WITH target_values AS ( SELECT value FROM (VALUES ('1a2b3c'), ('8s9r3h'), ('5h2j0m'), ('4m5m6n'), ('8i9o7l') ) AS v(value) ) SELECT tv.value, t1.name FROM target_values tv LEFT JOIN table1 t1 ON tv.value = t1.value;
适用于MySQL 5.7及更早版本(不支持VALUES子句构造数据集)
SELECT tv.value, t1.name FROM ( SELECT '1a2b3c' AS value UNION ALL SELECT '8s9r3h' UNION ALL SELECT '5h2j0m' UNION ALL SELECT '4m5m6n' UNION ALL SELECT '8i9o7l' ) tv LEFT JOIN table1 t1 ON tv.value = t1.value;
执行上述语句后,table1中存在的记录会正常显示对应的name,不存在的记录(如'4m5m6n'、'8i9o7l')的name字段会显示NULL,完全符合你要的输出要求。
内容的提问来源于stack exchange,提问作者Ravichandran Jothi
相关产品推荐
相关产品推荐

