Как исправить запрос, возвращающий много данных с помощью поисковых терминов - PullRequest
1 голос
/ 06 мая 2019

Я выполняю запрос, чтобы получить от всех клиентов мои данные. Из-за нового закона не все клиенты хранят адрес, поэтому у меня есть некоторые пустые значения. Это работает хорошо, если я запускаю «основной» запрос, извлекая всех клиентов, оставшихся в другой таблице. Когда я пытаюсь добавить поисковое слово, оно все равно дает мне весь набор, а не фильтрует его по поисковому запросу. Что я сделал не так?

Я попытался переписать запрос без левого соединения и просто WHERE c.customers_id = a.customers_id, но поскольку a.customers_id не всегда заполнен, я получаю намного меньше клиентов, чем у меня

select 
c.customers_id, c.customers_firstname, c.customers_lastname, c.customers_email_address, c.customers_account_validated, c.customers_payment_period, a.entry_country_id, a.entry_company 
from customers c 
left join address_book a on c.customers_id = a.customers_id 
and c.customers_default_address_id = a.address_book_id 
and (c.customers_lastname like '%adolfs%' 
or c.customers_firstname like '%adolfs%' 
or c.customers_email_address like '%adolfs%' 
or a.entry_company like '%adolfs%' or c.customers_id = 'adolfs') 
order by c.customers_id DESC

Я ожидал, что все клиенты с именем "adolfs" будут указывать имя, фамилию, название компании в адресе электронной почты

1 Ответ

2 голосов
/ 06 мая 2019
and (c.customers_lastname like '%adolfs%' 
or c.customers_firstname like '%adolfs%' 
or c.customers_email_address like '%adolfs%' 
or a.entry_company like '%adolfs%' or c.customers_id = 'adolfs') 

Они должны быть в предложении where, не являющемся частью вашего объединения

select 
c.customers_id, c.customers_firstname, c.customers_lastname, 
c.customers_email_address, c.customers_account_validated, 
c.customers_payment_period, a.entry_country_id, a.entry_company 
from customers c 
left join address_book a on c.customers_id = a.customers_id 
and c.customers_default_address_id = a.address_book_id 
where c.customers_lastname like '%adolfs%' 
or c.customers_firstname like '%adolfs%' 
or c.customers_email_address like '%adolfs%' 
or a.entry_company like '%adolfs%' 
or c.customers_id = 'adolfs') 
group by c.customers_id 
order by c.customers_id DESC

Это должно работать

...