Как приравнять составную/многозначную переменную SQL к другой многозначной составной переменной

Я пытаюсь работать с составными переменными так же просто, как с одной переменной. Я выполняю самостоятельное присоединение и пытаюсь сопоставить одну и ту же компанию и номер с другой компанией и номером с определенными значениями.

route(company, num, stop, pos) Каждый «num» (или номер автобусного маршрута) имеет несколько «stop» (адреса номеров остановок) на маршруте автобуса и от 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)

Маршруты в таблице уникальны по компаниям и номерам, как составной первичный ключ. Я хотел бы знать, какие маршруты останавливаются на XXX и YYY. В любом случае я могу сделать это, используя ЛЮБУЮ функцию. Я знаю, как это сделать, используя операторы where и группировку. Моя проблема конкретно "where (a.company, a.num) = any(select a.company, a.num..."


person user3105906    schedule 16.12.2013    source источник


Ответы (1)


Поверьте, вы используете 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)
person Rex    schedule 16.12.2013
comment
Это почти то же самое? (Cast(a.company как nvarchar(50))+Cast(a.num как nvarchar(50))) ? - person user3105906; 17.12.2013
comment
я согласен, что вы должны преобразовать значения в varchar, прежде чем присоединяться к ним (если они не относятся к типу varchar или nvarchar), но вы можете использовать что-то для объединения двух значений, иначе они могут быть продублированы, например, companyId = 12 и num = 3, с companyId=1 и num=23 они дадут тот же результат, что и 123... - person Rex; 18.12.2013