在mysql中搜索值对

时间:2011-05-12 12:08:46

标签: mysql

在我的表中,我有两个ID id1和id2

可能有重复项:

1 / 1
1 / 2
2 / 1
2 / 2
2 / 2

现在我想在数据库中搜索已定义的元组,如:我想要元组(1,1)和(2,1)和(1,2)的所有数据

如果我只有一个id,那么可以通过以下方式进行搜索:

WHERE id1 IN (1,2,3)

如果我为两个字段复制它,那将是:

id1 in (1,2)
id2 in (1,2)

但这显然也会选择(2,2)不需要的东西。

用tupels做这样的事情有可能吗? (备份解决方案是一个循环,每个tupel有一个查询)

3 个答案:

答案 0 :(得分:8)

CREATE TABLE test (
id INT UNSIGNED NOT NULL auto_increment,
pair_id INT UNSIGNED NOT NULL,
PRIMARY KEY(id, pair_id)
) ENGINE = InnoDB;

INSERT INTO test (pair_id) VALUES (1), (1), (1), (1), (2), (2), (2), (2), (3), (3), (3), (3);

SELECT * FROM test WHERE (id, pair_id) IN ((1,1), (2,1), (3,1), (4,2));

这就是我在你描述的元组的情况下构建表和查询的方法。在MySQL 5.1上测试它,它工作,它返回前3条记录。

答案 1 :(得分:4)

在这里不要使用mysql来测试,但我相信以下应该可以正常工作

select *
  from yourTable
 where concat(cast(id1 as char), '/', cast(id2 as char)) in ('1/1', '1/2', '3/1');

在这种情况下,您要搜索元组1/1或1/2或3/1

或如果id1id2被约束在[0,9]之间,那么您也可以

select *
  from yourTable
 where id1*10 + id2 in (11, 12, 31);

答案 2 :(得分:0)

和非条款:

where id1 in (1,2)
and id2 in (1,2)
and not (id1 = 2 and id2 = 2)