在我的表中,我有两个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有一个查询)
答案 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
或如果id1
和id2
被约束在[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)