这是我的问题:
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"别名做最后一行比较。
我该怎么办?
这是在没有最后一行比较的情况下显示信息(带有更多属性)的方式。
答案 0 :(得分:2)
问题是别名还不存在。因此,您必须重复完整代码或创建子查询。
SELECT *
FROM ( .... ) YourQuery
WHERE Disponible='Si';
了解更多详情
答案 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