在mysql中搜索值对

Flo*_*Flo 0 mysql

在我的表中,我有两个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有一个查询)

Mic*_*.V. 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));
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*tos 5

现在不要在这里测试 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

或者如果id1id2被限制在 [0, 9] 之间,那么你也可以

select *
  from yourTable
 where id1*10 + id2 in (11, 12, 31);
Run Code Online (Sandbox Code Playgroud)