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

如何将SQL复合/多值变量与另一个多值复合变量相等,sql,function,variables,composite,Sql,Function,Variables,Composite,我正在尝试处理复合变量,就像处理一个变量一样简单。 我正在做一个自加入,我正在尝试将同一个公司和编号与另一个公司和编号与特定值相匹配 路线(公司、编号、站点、位置) 每个“num”(或公交线路号)在其公交线路上都有多个“stop”(站号地址),以及1到X“pos”(或停车命令) 路由在表中按公司和num设置为唯一的,就像复合主键一样。我想知道哪些路线在XXX和YYY停。不管怎样,我都可以使用ANY函数来实现这一点。我知道如何使用where语句和group by。我的问题特别是“其中(a.comp

我正在尝试处理复合变量,就像处理一个变量一样简单。 我正在做一个自加入,我正在尝试将同一个公司和编号与另一个公司和编号与特定值相匹配

路线(公司、编号、站点、位置) 每个“num”(或公交线路号)在其公交线路上都有多个“stop”(站号地址),以及1到X“pos”(或停车命令)


路由在表中按公司和num设置为唯一的,就像复合主键一样。我想知道哪些路线在XXX和YYY停。不管怎样,我都可以使用ANY函数来实现这一点。我知道如何使用where语句和group by。我的问题特别是“其中(a.company,a.num)=any(选择a.company,a.num…”

请相信您正在使用MSSQL。对于任何或部分,它只能比较标量值,而不能比较(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)

这几乎是做同样的事情吗?(Cast(a.company as nvarchar(50))+Cast(a.num as nvarchar(50))?我同意在加入它们之前必须将值强制转换为varchar(如果它们不是varchar或nvarchar类型),但是您可以使用一些东西来连接这两个值,否则它可能会被复制,例如,companyId=12和num=3,当companyId=1和num=23时,它们将产生与123相同的结果。。。
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)