2014-02-28 72 views
1

我有許多記錄的MySQL表。我試圖找到一種方式來顯示滿足多個查詢條件的記錄。例如,如果我有這張桌子。SQL - 顯示滿足2個或多個條件的記錄

TABLE NAME: DATA 

ID contactid flag  flag_type 
----------------------------------- 
1  99   Volunteer 1 
2  99   Uploaded 2 
3 100   Via Import 3 
4 100   Volunteer 1 
5 100   Uploaded 2 

與如條件:

WHERE (ID > 2) OR (flag = 'Uploaded') OR (flag_type = 1) ..etc.. 

輸出將是其中的ID 4 & 5只將被返回。

+0

爲什麼只有4,5爲什麼不3,4,5儘管3也匹配where子句 –

+1

我正在尋找一種方式,只顯示其結果匹配至少2個條件。 ID 3只會遇到'ID> 2' – user2761030

回答

5

你可以指望的情況在MySQL的數量和使用這個值:

where ((id > 2) + 
     (flag = 'Uploaded') + 
     (flag_type = 1) 
    ) > 1 

的「真」一個布爾值,被視爲1和「假」被視爲0。因此,通過合計這些值,您可以得到滿足的條件數量。

通常情況下,你在order by做到這一點,首先獲得最匹配:

where id > 2 or flag = 'Uploaded' or flag_type = 1 
order by ((id > 2) + 
      (flag = 'Uploaded') + 
      (flag_type = 1) 
     ) desc; 
1

有了您的有限的問題,這是一個可以提供最。

WHERE `ID`>2 AND (`flag`='Uploaded' OR `flag_type`=1) ..etc 
+0

感謝這@f00644雖然可能有10個條件,但我試圖找到一種方式,至少有兩個條件匹配,無需將每個可能的排列作爲條件進行編碼 – user2761030

0

您的選擇正確,但您需要先閱讀boolean logic。 OR將返回匹配任意條件的記錄,AND將返回匹配全部條件的記錄。

1

http://sqlfiddle.com/#!2/572e1/11

將該溶液選擇您的每一個成功的條件1被添加到「因素」。然後,我們表明至少有2個因素的結果:

SELECT * FROM 
(select id, contactid, flag, flag_type, 
    (CASE WHEN id > 2 then 1 else 0 END) + 
    (CASE WHEN flag = 'Uploaded' then 1 else 0 END) + 
    (CASE WHEN flag_type = 1 then 1 else 0 END) AS factors 
    from DATA 
) t 
WHERE factors > 1