SQL - 显示满足多个条件中的两个或更多条件的记录

时间:2014-02-28 16:23:38

标签: mysql sql

我有一个包含许多记录的MySQL表。我试图找到一种方法来显示满足查询的多个条件的记录。例如,如果我有这张表。

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只会被退回。

4 个答案:

答案 0 :(得分:5)

您可以计算MySQL中的条件数并使用此值:

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

布尔值“true”被视为1,“false”被视为0。因此,通过将值相加,您可以获得满足的条件数。

通常,您在order by中执行此操作,以获得最匹配的第一个:

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

答案 1 :(得分:2)

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

此解决方案选择每个成功条件为1,并将其添加到“因子”中。然后我们显示至少有两个因素的结果:

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

答案 2 :(得分:1)

在您的有限问题中,这是可以提供的最多问题。

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

答案 3 :(得分:0)

您走的是正确的道路,但您需要先阅读boolean logic。 OR将返回与任何条件匹配的记录,AND将返回与所有条件匹配的记录。