2013-08-05 6 views
0

В запросе сегодня я хотел выбрать строки, которые имели конкретное название компании в любом из двух столбцов из двух разных таблиц. Я сделал это, какИспользование OR в WHERE дает неожиданные результаты

WHERE (N.COMPANY LIKE '%ACME%' OR C.COMPANY LIKE '%ACME%') 

Во-первых, потребовалось 20 минут, чтобы бежать, что было странно, потому что, если я только фильтруется на одной из колонн потребовалось около 10 секунд. Во-вторых, когда он закончил, значения для некоторых столбцов в некоторых строках были NULL, когда я знаю, что в базе данных есть значения для этих столбцов в этих записях. и так, что здесь происходит? Почему SQL не может выполнить OR в двух столбцах из двух таблиц?

(я работал вокруг него с UNION - я побежал за C.COMPANY LIKE '%ACME%' и UNIONED его с SELECT... WHERE N.COMPANY LIKE '%ACME%')

+1

Что вы имеете в виду„значений для некоторых строк были NULL“? Очевидно, вы присоединяетесь к тому, что вы не показываете нам, и вы делаете это неправильно! –

+1

Нам понадобится полный запрос (или, возможно, уменьшенная версия, воспроизводящая вашу проблему), некоторые примеры ввода и вывода и фактического вывода. – Dukeling

+0

Я очистил текст, чтобы уточнить, что я имел в виду. Весь запрос большой и имеет около 5 объединений. Он отлично работает без соединения OR в ГДЕ. – user2129949

ответ

0

Это плохая практика, чтобы перепутать JOIN и WHERE ключевое слово в одном запросе, потому что WHERE является INNER JOIN за кулисами. По моему опыту это часто приводит к неконтролируемым объединениям, которых не нужно.

Попробуйте разместить свои LIKE «сек после соединения соответствующих таблиц непосредственно, как это:

... 
JOIN N ON <Your existing relationship> AND N.COMPANY LIKE '%ACME%' 
... 
JOIN C ON <Your existing relationship> AND C.COMPANY LIKE '%ACME%' 
... 
Смежные вопросы