SQL if或where子句中的coelesce语句

时间:2016-02-04 16:14:05

标签: mysql

我有一个包含copy列的表格。 copy列有两个值:baseoverride。我有一个简单的问题。我想返回所有行where copy = 'override',但如果没有,则返回所有行。

我的逻辑是:返回复制重写的所有行。如果没有,则返回所有行,因为只剩下的行是base行。

我很难搞清楚这一点。这可以在一个声明中完成吗? 感谢。

2 个答案:

答案 0 :(得分:1)

你可以尝试

SELECT * 
FROM `YourTable` 
WHERE `copy` = (SELECT IF(
    (
        SELECT `copy`
        FROM `YourTable`
        WHERE `copy` = 'override'
        LIMIT 1) = "override", 
    'override',
    'base'
    ))

答案 1 :(得分:1)

试试这个:

SELECT * FROM TABLE
WHERE copy = 'override'
or(select count(*) from TABLE where copy = 'override') = 0

未经测试,请告诉我它是否有效。我们的想法是选择copy = override或者>如果没有覆盖,第一个条件将始终为false,并且它将转到OR部分,然后理想情况下我尝试实现类似1 = 1的内容,因此将获取所有行