簡體   English   中英

如何使用AND使用IN子句過濾多列

[英]How do I Filter Multiple Columns with IN clause using AND

我正在嘗試根據多個可能的值來過濾幾列中的數據。 如果我使用下面的語句,則會得到匹配的結果,但結果太多。 例如,如果我僅傳遞Status [Lead,Customer],則僅獲得這些記錄。 如果我添加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,因此我只會得到同時匹配Status [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 ('');

但是,如果我將OR更改為AND,除非沒有為每個字段進行選擇,否則我不會獲得任何記錄。 如果我沒有搜索價值,該如何獲得AND工作?

我想出了一種方法,可以將不包含在其中的字段包括在內:

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);

感謝您的指教!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM