在 SELECT 中检查 3 列

Posted

技术标签:

【中文标题】在 SELECT 中检查 3 列【英文标题】:Check 3 columns against each other in SELECT 【发布时间】:2021-03-29 15:40:09 【问题描述】:

我有一个包含 3 列的 SELECT 语句,并希望从中计算第四列。

    如果 Column1 有值,那么 Column4 = Column1 如果不是1.且Column2有值,那么Column4 = Column2 如果不是2.且Column3有值,那么Column4 = Column3 如果不是 3. NULL

基本上,如果找到一个值,则从 Column1 到 Column2 查找,然后将第一个值放入 Column4。

我可以很容易地用 2 列做到这一点:

SELECT 
    CASE 
       WHEN (Column1 IS NOT NULL AND Column1 <> '') 
          THEN Column1 
          ELSE Column2 
    END 'Column4'

但我不知道如何将Column3 合并到该逻辑中。唯一认为我现在能想到的是将结果存储为 temptable 或 view,然后再做一个 SELECT 将找到的值与 Column3 进行比较。

重要提示:所有 3 列都可以包含字符串、NULL、' ' 或 '' 的所有可能组合

【问题讨论】:

"重要提示:所有 3 列都可以包含所有可能的字符串组合,NULL' ' 或 ''" 那么我个人会解决这个问题数据模型也不允许在您的数据中使用零长度字符串(以及 UPDATE 现有的 NULL)。 【参考方案1】:
SELECT COALESCE(NULLIF(Column1, ''), NULLIF(Column2, ''), NULLIF(Column3, ''), NULL) AS Column4...

COALESCE 按顺序计算参数并返回最初不计算为 NULL 的第一个表达式的当前值。

NULLIF 如果两个指定的表达式相等,则返回空值。

【讨论】:

【参考方案2】:

您可以使用COALESCE

SELECT COALESCE(Column1, Column2, Column3) AS Column4

更新处理''

SELECT COALESCE(NULLIF(Column1, ''), NULLIF(Column2, ''), NULLIF(Column3, '')) AS Column4

【讨论】:

以上是关于在 SELECT 中检查 3 列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql- SELECT列'A',即使使用NULLS

通过jquery将数据库中的列填充到select2中

有效地从子查询中选择多个列(放置在 SELECT 线索中)

用于计算运行平均列的 SQL Select 语句

Jquery Select2 插件版本检查

参数化查询:检查字段是不是在 SELECT 语句中的值数组中