sql:如何将字段合并到选择查询中的向量中?

时间:2012-11-01 07:19:36

标签: sql

我的意思是:

...
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))

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

2 个答案:

答案 0 :(得分: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也应该支持它。

答案 1 :(得分:1)

对于SQLServer2005 +

函数CHECKSUM()计算称为校验和的哈希值。 more info

SELECT *
FROM dbo.your_table t
WHERE CHECKSUM(a,b) in (CHECKSUM(1,1),CHECKSUM(1,2),CHECKSUM(2,3),CHECKSUM(3,2))