联合主键批量查询
工作所需查詢數據,表中的是聯合主鍵,即兩個字段可以確認唯一一條數據,經過查詢找到如下辦法,mysql oracle均可執行,至于執行效率未知,有待考驗。
原文地址:https://www.v2ex.com/t/430599
原原文地址(需要翻墻):https://dba.stackexchange.com/questions/34266/selecting-where-two-columns-are-in-a-set
測試案例
在mysql 和oracle中均測試可用,以下以mysql為例
建表以及模擬數據
CREATE TABLE ddd (
? id int(11) default NULL,
? batch_info varchar(255) default NULL,
? name varchar(255) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO ddd (id, batch_info, name)
VALUES
?? ?(1, '1', '1111'),
?? ?(2, '1', '1111'),
?? ?(3, '1', '1111'),
?? ?(4, '1', '1111'),
?? ?(5, '2', '2222'),
?? ?(6, '2', '2222'),
?? ?(7, '2', '2222'),
?? ?(8, '3', '3333'),
?? ?(9, '3', '3333'),
?? ?(1, NULL, '其他群體'),
?? ?(2, '3', '其他群體');
SQL
目標效果的sql
SELECT
?? ?*
FROM
?? ?ddd
WHERE
?? ? (id = 1 AND batch_info = 1)
OR (id = 2 AND batch_info = 1)
OR (id = 3 AND batch_info = 1)
OR (id = 5 AND batch_info = 2)
改造后
SELECT *
FROM? ddd
WHERE (id, batch_info)
IN ((1, 1), (2, 1), (3, 1),(5, 2)) ;
改造的目的 是為了 在mybatis中查詢,使用list 進行foreach進行查詢,雖然 用OR也可以實現,但總覺不好看,嗯,對就是不好看,故改用后者辦法。至于查詢效率,有待考察。僅供參考。
?
?
?
總結
- 上一篇: PostgreSQL 杀会话
- 下一篇: APP+spring boot校园购物网