如何将SQL复合/多值变量与另一个多值复合变量相等

时间:2013-12-16 03:47:36

标签: sql function variables composite

我正在尝试使用复合变量,就像一个变量一样简单。 我正在进行自我加入,我正在尝试将同一公司和号码与另一家公司和具有特定价值的号码相匹配。

路线(公司,数字,停止,pos) 每个“num”(或公交车路线号码)在其公交线路上有多个“停止”(停止号码地址),1到X“pos”(或停止命令)。

select a.company, a.num
from route as a
join route as b
on a.company = b.company and a.num = b.num
where (a.company, a.num) = any(
   select a.company, a.num 
   from a 
   join b
   where a.stop = XXX, b.stop = YYY)

路由在公司和num之类的表中是唯一的,如复合主键。我想知道哪些路线在XXX和YYY停靠。无论如何,我可以使用ANY函数执行此操作。我知道如何使用where语句和group by来做到这一点。我的问题特别是“其中(a.company,a.num)= any(选择a.company,a.num ......”

1 个答案:

答案 0 :(得分:0)

相信你正在使用MSSQL。对于ANY或SOME,它只能比较标量值,而不是像(a.company,a.num)那样的对。

如果您坚持使用ANY,您可以使用逗号加入这两个值 - 因为它们是唯一的,所连接的值也是唯一的。类似的东西:

select a.company, a.num
from route as a
join route as b
on a.company = b.company and a.num = b.num
where (a.company + ',' + a.num) = any(
   select a.company + ',' + a.num 
   from a 
   join b
   where a.stop = XXX, b.stop = YYY)