如何修改SQL查询实现source_id与data_id的逐一绑定?
实现source_id与data_id的逐一绑定查询
嘿,这个需求我经常碰到,给你分享几种靠谱的实现方式,你可以根据实际场景选:
方法1:用OR组合成对的AND条件(适合少量绑定组)
这是最直观的写法,直接把每一组绑定关系用AND组合,再用OR连接起来:
SELECT * FROM some_table WHERE (source_id = '123' AND data_id = '1') OR (source_id = '124' AND data_id = '2');
这种写法逻辑清晰,新手也一眼能看懂,就是绑定组多了的话,SQL会显得冗长。
方法2:用VALUES构造匹配表+JOIN(适合大量绑定组)
如果以后要加更多的绑定对,推荐用这种方式,维护起来更方便:
SELECT t.* FROM some_table t JOIN (VALUES ('123', '1'), ('124', '2') -- 以后加新的绑定组直接在这里加行就行 ) AS matches(s_id, d_id) ON t.source_id = matches.s_id AND t.data_id = matches.d_id;
核心思路是先构造一个临时的匹配关系表,再通过JOIN把原表中符合对应关系的行筛选出来,扩展性拉满。
方法3:用CASE表达式判断(小众但可行)
还有一种用CASE的写法,虽然不如前两种常用,但也算一种思路:
SELECT * FROM some_table WHERE CASE source_id WHEN '123' THEN data_id = '1' WHEN '124' THEN data_id = '2' ELSE FALSE END;
这里通过CASE对每个source_id判断对应的data_id是否符合,不符合就返回FALSE,从而过滤掉不匹配的行。
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

