Лучший способ исключить записи из нескольких таблиц - PullRequest
1 голос
/ 26 октября 2011

Я получил следующие таблицы (только в качестве примера): транспортные средства, vehicle_description, vehicle_parts

транспортных средств имеют 1 ко многим с vehicle_describes и vehicle_parts.Для данного транспортного средства может отсутствовать соответствующее описание транспортного средства / детали.

SELECT * FROM vehicles
   LEFT OUTER JOIN vehicles d ON vehicles.vin = d.vin AND d.summary NOT LIKE 'honda'
   LEFT OUTER JOIN        
   (SELECT SUM(desc_total) FROM vehicle_descriptions WHERE NOT LIKE desc 'honda' GROUP BY vin) b 
   ON vehicles.vin = vehicle_b.vin
   LEFT OUTER JOIN 
   (SELECT SUM(part_count) FROM vehicle_parts WHERE part_for NOT LIKE 'honda' GROUP BY vin) c ON vehicles.vin = c.vin

Если в качестве значения транспортного средства / транспортных средств или детали содержится исключающее условие, вся запись не должна отображаться в наборе результатов.Приведенный выше запрос вернет запись, даже если в одной из таблиц содержится термин исключения Honda.Как бы я исправить вышеуказанный запрос?

1 Ответ

2 голосов
/ 26 октября 2011

Вы не используете какую-либо информацию в sum () как часть того, что вы показываете, просто чтобы решить, включать ли транспортное средство.И вы делаете ненужное самостоятельное объединение в своем первом предложении.Как правило, в подобных ситуациях пункты «существует» и «не существует» работают хорошо.Так что по этому поводу?Я буду использовать синтаксис Oracle, вы можете конвертировать в ANSI, конечно.

    SELECT * FROM vehicles v where summary <> 'honda' 
and not exists (select 1 from vehicle_descriptions d where d.vin = v.vin and d.desc <> 'honda') 
and not exists (select 1 from vehicle_parts p where p.vin = v.vin and p.part_for <> 'honda')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...