联合主键批量查询

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

 

 

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值