MySQL与额外条件合并

时间:2015-09-08 19:33:10

标签: mysql sql

我有几个列的结果集,可能有也可能没有空值。我想要第一个非空结果大于1,在合并我的列时添加此次要条件的最佳方法是什么?

e.g。

result:
col1 col2 col3
1    null  2
null 1     3    
null null  4 

返回2 3和4

5 个答案:

答案 0 :(得分:3)

SELECT COALESCE(IF(col1>1,col1, NULL), IF(col2>1, col2, NULL), IF(col3>1, col3, NULL))
FROM tab

答案 1 :(得分:3)

lad2025的答案是正确的,你必须为每列提供一个if。但是,既然你必须拥有那些功能,那么你也可以这样做

SELECT IF(col1>1, col1, if(col2>1, col2, if (col3>1, col3, null)))

或类似地

SELECT CASE WHEN col1>1 THEN col1
       WHEN col2>1 THEN col2
       WHEN col3>1 THEN col3
       ELSE null END

这些中的任何一个都会比使用coalesce更有效率和更少的代码,因为您仍然必须使用if来清空任何列中的任何值1

答案 2 :(得分:2)

你可以使用nullif

SELECT COALESCE(
        NULLIF(col1, 1),
        NULLIF(col2, 1),
        NULLIF(col3, 1))

SQL FIDDLE

答案 3 :(得分:2)

您可以使用单个CASE语句执行此操作:

SELECT CASE WHEN IFNULL(col1, 0) > 1 THEN col1
            WHEN IFNULL(col2, 0) > 1 THEN col2
            WHEN IFNULL(col3, 0) > 1 THEN col3
       END
FROM mytable

案件也可以写成:

            WHEN colN IS NOT NULL AND colN > 1 THEN colN

答案 4 :(得分:0)

SELECT CASE
           WHEN COL1 IS NOT NULL and COL1 > 1 THEN COL1
           WHEN COL2 IS NOT NULL and COL2 > 1 THEN COL2
           WHEN COL3 IS NOT NULL and COL3 > 1 THEN COL3
       END