как дубликаты удаляются при использовании подзапроса - PullRequest
0 голосов
/ 01 октября 2018

это может быть простой вопрос, но мне нужен кто-то, чтобы объяснить это.Я пытаюсь получить данные из таблицы car_employee с условием цена_платы> 10000 (это из другой таблицы: car_purchases), и я использую следующий запрос.

select eid, fname, lname, home_phone
from dbo.car_employee
where eid in (select eid from dbo.car_purchases where price_paid > 10000);

Это дает мне правильный ответно когда я выполняю только внутренний запрос, он дает мне дубликаты значений eid, но весь запрос не дает никаких дубликатов.Как данные там фильтруются?

PS: я использовал JOIN в качестве альтернативы, но там я получаю дубликаты.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Учитывайте следующее:

Ваш внешний запрос поступает из таблицы car_employee, поэтому, если car_employee не имеет несколько записей для одного и того же EID, они будут отображаться 1 раз (или 0)

«Где eid IN» просто ограничивает, а не объединяет, поэтому он не может добавлять записи в таблицу car_employee - или, лучше сказать, вы можете получить не более 1 результата на запись в таблице car_employee.

 select 1 where 1 in (1,2,3,1,2,3,1,2,3) 

приведет к одной строке - "1"

0 голосов
/ 01 октября 2018

Дубликаты не фильтруются.Это просто, как работает IN.Предложение WHERE не может увеличить количество строк (за исключением очень исключительных случаев в небольшом количестве баз данных).

Это верно, является ли список константой или подзапросом.Итак, они делают одно и то же:

where x in (1)
where x in (1, 1, 1, 1, 1, 1, 1)

Если вы хотите, чтобы строки умножались, используйте join.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...