[英]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.