我有一个包含copy
列的表格。 copy
列有两个值:base
和override
。我有一个简单的问题。我想返回所有行where copy = 'override'
,但如果没有,则返回所有行。
我的逻辑是:返回复制重写的所有行。如果没有,则返回所有行,因为只剩下的行是base
行。
我很难搞清楚这一点。这可以在一个声明中完成吗? 感谢。
答案 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的内容,因此将获取所有行