Я хочу выбрать записи, которые имеют GUID и не существуют в parentGUID
Введите здесь описание изображения
Я пробовал этот код
select code, GUID, ParentGUID
from ac00
where NOT EXISTS (select ParentGUID from ac00 where GUID <> ParentGUID)
order by Code asc
Вы были близки, но у вас не было псевдонимов.
select code,GUID,ParentGUID
from ac00 t1
where NOT EXISTS (select * from ac00 t2
where t2.GUID = t1.ParentGUID)
order by Code asc;
Вы можете сделать это более быстрым способом. Соединения обычно выполняются намного быстрее, чем внутренние запросы.
select ac1.Code,ac1.GUID,ac1.ParentGUID
from ac00 ac1 LEFT OUTER JOIN dbo.ac00 ac2
ON ac2.Guid = ac1.ParentGuid
WHERE ac2.Code IS NULL
Кажется, ты прав!
Мои знания устарели: «Много лет назад LEFT JOIN работал быстрее, но такого уже давно не было».
Поля 1-типа GUID, ParentGUID преобразуются в int, int 2-УНИКАЛЬНЫЙ КЛАСТЕРНЫЙ ИНДЕКС по GUID, НЕКЛАСТЕРНЫЙ ИНДЕКС по ParentGUID
Напишите коды Sql в ответах
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
1- ИЗМЕНИТЬ ТАБЛИЦУ dbo.tt ИЗМЕНИТЬ СТОЛБЦ [ParentGUID] INT ИЗМЕНИТЬ ТАБЛИЦУ dbo.tt ИЗМЕНИТЬ СТОЛБЦ [GUID] INT
2- СОЗДАТЬ УНИКАЛЬНЫЙ КЛАСТЕРНЫЙ ИНДЕКС icl ON dbo.tt([GUID]) СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС inoncl ON dbo.tt([ParentGUID])
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Это неправда, см. dba.stackexchange.com/questions/121034/…