Устранить строки, которые становятся такими же после замены, как в исходной таблице на SQL Server - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица, которая содержит следующие данные:

create table journey(
Src varchar(255), Dest varchar(255))

insert into journey values('Jaipur', 'Mumbai'), ('Mumbai', 'Jaipur'), ('Kolkata', 'Bangalore'), ('Bangalore', 'Indore'), ('Indore', 'Lucknow'), ('Lucknow', 'Indore')

Мне нужна таблица, в которой нет Мумбаи ---> Джайпур, так как она уже есть перед обменом. Точно так же Лакхнау ---> Индор не требуется. Все остальные записи должны быть такими, какие есть в существующей таблице.

Может ли помочь любое тело.

Примечание. В таблице не должно быть идентификаторов или S.No. в таблице.

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Вы можете создать view или использовать оператор select с not exists для предотвращения дублирования пути:

select j.*
from journey  j
where not exists (select 1 
                  from journey j1 
                  where j1.src = j.dest and j1.dest = j.src and 
                        j1.src < j.src and j1.dest > j.dest
                 );
0 голосов
/ 11 марта 2020

Один метод заключается в использовании вычисляемых столбцов и уникального индекса:

alter table journey add least_src_dest as (case when src < dest then src else dest end) persisted;

alter table journey add greatest_src_dest as (case when src < dest then dest else src end) persisted;

create unique index unq_journey_least_greatest on journey(least_src_dest, greatest_src_desc);

Другой метод состоит в том, чтобы настаивать на порядке между src и dest с использованием ограничения check, а затем добавить уникальное ограничение:

alter table journey check (src < dest);

create unique index unq_journey_src_desc on journey(src,desc);

Примечание. Это позволяет только вставлять пару как «Джайпур» / «Мумбаи».

Кроме того, имена столбцов, такие как src и dest, являются не согласуется с этим ограничением. Маршрут самолета из Джайпура в Мумбаи сильно отличается от маршрута из Мумбаи в Джайпур. Их, вероятно, следует назвать как-то вроде location1 и location2.

...