联合主键批量查询

工作所需查询数据,表中的是联合主键,即两个字段可以确认唯一一条数据,经过查询找到如下办法,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也可以实现,但总觉不好看,嗯,对就是不好看,故改用后者办法。至于查询效率,有待考察。仅供参考。

 

 

 

你可能感兴趣的:(数据库)