MySQL/MariaDB查询给定ID列表返回存在及缺失ID对应数据的实现方法
MySQL/MariaDB实现指定ID匹配查询方案
核心思路是先构造包含所有待查询ID的临时行集,再和目标表做左连接,左表的所有ID会保留,右表匹配不到时label字段自动返回NULL。
方案1:适配 MySQL 8.0+ / MariaDB 10.3+ 版本
高版本已经支持VALUES行构造语法,写法和PostgreSQL基本一致:
SELECT t.id, your_table.label FROM (VALUES ROW(3), ROW(4), ROW(5)) AS t(id) LEFT JOIN your_table ON t.id = your_table.id;
方案2:兼容所有MySQL/MariaDB版本的通用写法
低版本不支持VALUES构造行集的话,用UNION ALL拼接待查询ID即可:
SELECT t.id, your_table.label FROM ( SELECT 3 AS id UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS t LEFT JOIN your_table ON t.id = your_table.id;
把上述SQL中的your_table替换为实际的表名,即可得到预期查询结果:
id | label ---------- 3 | green 4 | NULL 5 | blue
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

