联合主键批量查询
工作所需查詢數(shù)據(jù),表中的是聯(lián)合主鍵,即兩個(gè)字段可以確認(rèn)唯一一條數(shù)據(jù),經(jīng)過查詢找到如下辦法,mysql oracle均可執(zhí)行,至于執(zhí)行效率未知,有待考驗(yàn)。
原文地址:https://www.v2ex.com/t/430599
原原文地址(需要翻墻):https://dba.stackexchange.com/questions/34266/selecting-where-two-columns-are-in-a-set
測(cè)試案例
在mysql 和oracle中均測(cè)試可用,以下以mysql為例
建表以及模擬數(shù)據(jù)
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
目標(biāo)效果的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 進(jìn)行foreach進(jìn)行查詢,雖然 用OR也可以實(shí)現(xiàn),但總覺不好看,嗯,對(duì)就是不好看,故改用后者辦法。至于查詢效率,有待考察。僅供參考。
?
?
?
總結(jié)
- 上一篇: PostgreSQL 杀会话
- 下一篇: APP+spring boot校园购物网