如果多个列在MySQL查询中等于某个值,我该如何返回true或false?

时间:2010-09-22 19:51:43

标签: mysql select subquery

我有一个数据库表(MySQL),我正在运行一个简单的SELECT。在这个表中,我有3个字段,每个字段包含3个可能的值。在每种情况下,值都是相同的('无','在线','物理')。如果其中任何一个字段未设置为“none”,我想在结果中返回别名的true或false值。

在我返回结果集后,我可以很容易地在PHP中对此进行评估,但为了轻松地对结果进行排序,我宁愿在SELECT中生成true / false。所以目前结果行可能如下所示:

id: 1 
trial_type_1: none
trial_type_2: online
trial_type_3: none

在这种情况下,我希望查询返回:

id: 1
trial: True

如果所有trial_type字段都设置为none,则它将返回试验值False。任何想法都非常感激,因为我真的不知道从哪里开始,甚至在网上搜索什么! :)

5 个答案:

答案 0 :(得分:6)

我在其中使用了一个case语句,这是一个非常灵活的方法,非常有用。

select id, 
(CASE WHEN trial_type_1 <> 'none' OR trial_type_2 <> 'none' 
           OR trial_type_3 <> 'none'
 THEN 'True' ELSE 'False' END) as trial
FROM q3773072

然而,您可以将其作为一个简单的逻辑操作 - 可能更接近您想要的操作,如下所示:

SELECT id, 
       (trial_type_1 <> 'none' OR  trial_type_2 <> 'none'  OR trial_type_3 <> 'none' )  as Trial  
from q3773072

执行此操作的正确方式当然是将多个trial_types存储在另一个表中 - 当您开始编号字段时,数据库架构需要更改的线索。您还应该设置另一个表来定义试验类型及其定义 - 即它们是否是真正的试验。

我可能会采用后一种方法,因为很有可能你将来会在某个时候添加另一种试用类型,如果你做得不好会很痛苦。

答案 1 :(得分:2)

这应该有效:

SELECT
    id,
    NOT (trial_type_1 IS NULL AND trial_type_2 IS NULL AND trial_type_3 IS NULL) AS trial
FROM ...

答案 2 :(得分:1)

您可以使用CASE:

SELECT ID, CASE WHEN trial_type_1='none' AND trial_type_2='none' AND trial_type_3='none' THEN 'false' ELSE 'true' END
    FROM YourTable

答案 3 :(得分:0)

这可能有效:

SELECT id,
       (trial_type_1 <> 'none' 
        OR trial_type_2 <> 'none' 
        OR trial_type_3 <> 'none')  AS some_not_none
FROM ...

答案 4 :(得分:0)

您可以使用MySQL IF statement

SELECT
  id,
  IF (
    (trial_type_1 != 'none'
     OR trial_type_2 != 'none'
     OR trial_type_3 != 'none'
    ), 1, 0
  ) AS trial
FROM ...