1

我的意思是:

...
select...
where (a=1 and b=1) or (a=1 and b=2) or (a=2 and b=3) or(a=3 and b =2)

这可以简化为类似

...select...
where (a,b) in ((1,1),(1,2),(2,3),(3,2))

这个想法不是单独检查字段,而是将它们合并成一个向量并检查向量值。

4

2 回答 2

3

您没有说明您的 DBMS,但是:

where (a,b) in ((1,1),(1,2),(2,3),(3,2))

是有效的(标准)SQL。

它(至少)在 PostgreSQL、Oracle 和 MySQL 中有效:

PostgreSQL的 SQLFiddle 演示: http
://sqlfiddle.com/#!12/ffbcb/1 Oracle 的SQLFiddle 演示: http
://sqlfiddle.com/#!4/a42cb/1 MySQL 的 SQLFiddle 演示:http://sqlfiddle .com/#!2/a42cb/1

由于这是 ANSI SQL,其他 DBMS 也应该支持它。

于 2012-11-01T13:40:55.620 回答
1

对于 SQLServer2005+

函数 CHECKSUM() 计算称为校验和的哈希值。更多信息

SELECT *
FROM dbo.your_table t
WHERE CHECKSUM(a,b) in (CHECKSUM(1,1),CHECKSUM(1,2),CHECKSUM(2,3),CHECKSUM(3,2))
于 2012-11-01T12:45:57.380 回答