Я работаю над данными о транспортировке.Найти отсутствующий маршрут в SQL Server
Origin Destination (... other columns)
CityA CityB
CityA CityC
Я хочу, чтобы выяснить, не хватает пары происхождения-назначения встречи следующего набора:
- Если мы имеем cityâ (происхождение) -> CityB (назначения), но мы не имеем CityB (изначальный) -> CityA (пункт назначения), затем выведите CityB (происхождение) -> CityA (пункт назначения).
- Если у нас есть CityA (origin) -> CityB (пункт назначения), и у нас есть CityB (origin) -> CityA (destination), то ничего не выводится.
Образец intput: выход
Origin Destination (... other columns)
CityA CityB
CityA CityC
Пример:
Origin Destination (... other columns)
CityB CityA
CityC CityA
Что я пробовал:
with t1 as (
select distinct t.ofips, t.dfips
from table t
),
t2 as (
select distinct t.ofips, t.dfips
from table t
),
t3 as (
select distinct t1.ofips, t1.dfips
from t1
inner join t2
on t1.ofips = t2.dfips
and t1.dfips = t2.ofips
),
t4 as (
select distinct t1.ofips, t1.dfips
from t1
left join t3
on t1.ofips = t3.ofips
and t1.dfips = t3.dfips
where t3.ofips is null or t3.dfips is null
)--,
select * from t4
Однако результаты кажутся неправильными. Что не так с кодом? Я что-то упускаю?
Примечание: Производительность является проблемой, потому что стол довольно большой.