如果声明在子句中

时间:2015-09-09 08:34:12

标签: sql oracle

只有在遵守条件时才需要添加where子句,例如:

SELECT * FROM car Where <a condition> 
and ( if (car.brand = 'Renault') then car.color = 'red')

在我的例子中:如果品牌是renault,我只想要红色汽车,只有在没有雷诺的情况下我才想要其他汽车

是否可以在SQL中编写类似的东西(没有PLSQL)?

3 个答案:

答案 0 :(得分:2)

您不能在if子句中使用where(SQL甚至不知道if)。要达到你想要的效果,你需要使用类似的东西:

where ... and (car.brand = 'Renault' and car.color = 'red' or car.brand <> 'Renault')

这种脱节说“如果品牌是雷诺,那么颜色需要是红色,对于其他品牌来说无关紧要”

如果你 - 当你发表评论 - “只想要雷诺红,......其他车只有在没有雷诺的时候”,那么你需要检查雷诺的不存在:

where ... 
and (car.brand = 'Renault' and car.color = 'red' 
     or not exists (select * from car where car.brand = 'Renault'))

答案 1 :(得分:1)

以下简单逻辑。

如果您不确定,可能需要为此类查询编写真值表。

SELECT * 
FROM car 
WHERE <a condition> 
AND ((car.brand= 'Renault' and car.color = 'red') OR car.brand != 'Renault')

答案 2 :(得分:0)

试试这个

SELECT * FROM car Where <a condition> 
and (car.brand = 'Renault' AND car.color = 'red' OR car.brand <> 'Renault')