在我的表中,我有两个ID id1和id2
可能有重复的像:
1 / 1
1 / 2
2 / 1
2 / 2
2 / 2
Run Code Online (Sandbox Code Playgroud)
现在我想在数据库中搜索已定义的元组,如:我想要元组(1,1)和(2,1)和(1,2)的所有数据
如果我只有一个id,那么有一种很好的搜索方式:
WHERE id1 IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
如果我为两个字段复制它,那将是:
id1 in (1,2)
id2 in (1,2)
Run Code Online (Sandbox Code Playgroud)
但这显然也会选择(2,2)不需要的东西.
用tupels做这样的事情有可能吗?(备份解决方案是一个循环,每个tupel有一个查询)
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));
Run Code Online (Sandbox Code Playgroud)
这就是我在你描述的元组的情况下构造表和查询的方法.在MySQL 5.1上测试它,它工作,它返回前3条记录.
现在不要在这里测试 mysql,但我相信以下应该可以工作
select *
from yourTable
where concat(cast(id1 as char), '/', cast(id2 as char)) in ('1/1', '1/2', '3/1');
Run Code Online (Sandbox Code Playgroud)
在本例中,您想要搜索元组 1/1 或 1/2 或 3/1
或者如果id1和id2被限制在 [0, 9] 之间,那么你也可以
select *
from yourTable
where id1*10 + id2 in (11, 12, 31);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |