CASE声明ALIAS比较

时间:2016-01-19 22:17:03

标签: sql oracle case alias

这是我的问题:

SELECT DISTINCT v.codi, m.nom, v.matricula, v.data_compra, v.color,
 v.combustible, v.asseguranca, 
(CASE WHEN lloguer.dataf IS NOT NULL THEN 'Si' ELSE 'Llogat'  END) AS Disponible 
FROM vehicle v 
INNER JOIN model m on model_codi=m.codi 
INNER JOIN lloguer on codi_vehicle=v.codi 
WHERE Disponible='Si';

我尝试做的只是显示那些包含" lloguer.dataf"的行。不是NULL,但它并没有让我使用" Disponible"别名做最后一行比较。

我该怎么办?

这是在没有最后一行比较的情况下显示信息(带有更多属性)的方式。

enter image description here

3 个答案:

答案 0 :(得分:2)

问题是别名还不存在。因此,您必须重复完整代码或创建子查询。

SELECT *
FROM ( .... ) YourQuery
WHERE Disponible='Si';

您可以在https://community.oracle.com/thread/1109532?tstart=0

了解更多详情

答案 1 :(得分:1)

我本质上是一个TSQL人,但你可以这样做吗?

Select distinct codi, nom,matricula, data_compra, colour, combustible, asseguranca from
(SELECT DISTINCT v.codi, m.nom, v.matricula, v.data_compra, v.color,
 v.combustible, v.asseguranca, 
(CASE WHEN lloguer.dataf IS NOT NULL THEN 'Si' ELSE 'Llogat'  END) AS Disponible 
FROM vehicle v 
INNER JOIN model m on model_codi=m.codi 
INNER JOIN lloguer on codi_vehicle=v.codi)
WHERE Disponible='Si';

正如@JuanCarlosOropeza所说,别名在最初提取数据之前不存在。这就是为什么你可以在order by子句中使用别名而不使用子查询,但不能在where子句中使用,因为数据还没有被提取。

答案 2 :(得分:1)

从SELECT块中删除CASE WHEN,并将WHERE子句替换为:

WHERE lloguer.dataf IS NOT NULL