Как отфильтровать несколько столбцов с предложением IN, используя AND

0

Я пытаюсь фильтровать данные в нескольких столбцах на основе нескольких возможных значений. Если я использую приведенное ниже выражение, я получаю соответствующие результаты, но слишком много. Например, если я передаю только статус [Ведущий, Клиент], я просто получаю эти записи. Если я добавлю SalesRep [cary], тогда я также получу все соответствующие записи Cary, которые включают некоторые с другим статусом, таким как Prospect.

SELECT id, 'ContactID', Status, SalesRep, LeadSource, 'PhysicalAddress_State', 'PhisicalAddress_Zip'  FROM Contacts WHERE
Status IN ('Lead','customer') OR
SalesRep IN('cary') OR
LeadSource IN ('') OR
PhysicalAddress_State IN ('') OR
PhisicalAddress_Zip IN ('');

Я ищу AND, поэтому я получаю только записи, соответствующие статусу [Lead, Customer] и SalesRep [cary]

SELECT id, 'ContactID', Status, SalesRep, LeadSource, 'PhysicalAddress_State', 'PhisicalAddress_Zip'  FROM Contacts WHERE
Status IN ('Lead','customer') AND
SalesRep IN('cary') AND
LeadSource IN ('') AND
PhysicalAddress_State IN ('') AND
PhisicalAddress_Zip IN ('');

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

  • 1
    Возможно, LeadSource равен нулю, а не ''
  • 0
    может быть, попробуйте только добавить что-то к месту, если вы собираетесь искать его. Например, если вы ищете только записи, которые имеют статус «ведущий» или «клиент», оставьте все остальное где.
Показать ещё 7 комментариев
Теги:

1 ответ

0

Я смог найти способ не включать поля в ГДЕ, это то, что я придумал:

SELECT id, 'ContactID', Status, SalesRep, LeadSource, 'PhysicalAddress_State', 'PhisicalAddress_Zip'  FROM Contacts WHERE
IF(true, Status IN ('Closed'), id != 0) AND
IF(true, SalesRep IN('Cary'), id != 0) AND
IF(false, LeadSource IN (''), id != 0) AND
IF(false, PhysicalAddress_State IN (''), id != 0) AND
IF(true, PhisicalAddress_Zip IN ('87123'), id != 0);

Для моей среды:

SELECT id, 'ContactID', Status, SalesRep, LeadSource, 'PhysicalAddress_State', 'PhisicalAddress_Zip'  FROM Contacts WHERE
IF(:includeStatus, Status IN :status, id != 0) AND
IF(:includeSalesRep, SalesRep IN :SalesRep, id != 0) AND
IF(:includeLeadSource, LeadSource IN :LeadSource, id != 0) AND
IF(:includePhysicalAddress_State, PhysicalAddress_State IN :PhysicalAddress_State, id != 0) AND
IF(:includePhisicalAddress_Zip, PhisicalAddress_Zip IN :PhisicalAddress_Zip, id != 0);

Спасибо за советы!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню