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

Posted

技术标签:

【中文标题】如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?【英文标题】:How do I return true or false if multiple columns equal a certain value in MySQL query? 【发布时间】:2011-04-15 22:37:55 【问题描述】:

我有一个单独的数据库表 (mysql),我在上面运行一个简单的 SELECT。在此表中,我有 3 个字段,每个字段包含 3 个可能的值。在每种情况下,值都是相同的(“无”、“在线”、“物理”)。如果这些字段中的任何一个未设置为“无”,我想在结果中返回别名的真或假值。

返回结果集后,我可以轻松地在 php 中对此进行评估,但为了轻松地对结果进行排序,如果可能的话,我宁愿在 SELECT 中生成真/假。所以目前结果行可能如下所示:

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

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

id: 1
trial: True

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

【问题讨论】:

【参考方案1】:

我会在其中使用 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 存储在不同的表中 - 当您开始对字段进行编号时,这是 数据库模式需要更改的线索强>。您还应该设置另一个表来定义试验类型及其定义 - 即它们是否是真正的试验。

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

【讨论】:

阿门! “当您开始对字段进行编号时,这表明数据库架构需要更改” Brill,谢谢理查德......在这种情况下,客户有许多产品我需要指示试用访问......目前总共只有 5 个,但是是的,我认为需要一些抽象这里! :)【参考方案2】:

这应该可行:

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

【讨论】:

假设试用值“none”在数据库中输入为NULL【参考方案3】:

你可以使用 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

【讨论】:

【参考方案4】:

这可能有效:

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

【讨论】:

【参考方案5】:

您可以使用 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 ...

【讨论】:

以上是关于如果多个列等于 MySQL 查询中的某个值,我如何返回 true 或 false?的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何更新一个表中的某个字段值等于另一个表的某个字段值

mysql 查询某一字段值不等于某个字符串的记录

sql如何根据一个字段的多个值查询

mysql中的unique

matlab数组中如何找某个值的坐标

在 MySQL 中查询单个列中的多个值