PostgreSQL - 列不存在错误:列“ins_file_url”不存在

问题描述

我在 Postgresql 中有这个查询

SELECT cars.*,manufacturers.company_name AS manufacturer_company_name,companies.mailing_name AS company_mailing_name,(SELECT car_documents.file_url FROM car_documents
         WHERE car_documents.car_id = cars.id AND car_documents.document_type = 1 LIMIT 1) AS ins_file_url,(SELECT car_documents.file_url FROM car_documents
         WHERE car_documents.car_id = cars.id AND car_documents.document_type = 3 LIMIT 1) AS guar_file_url,FROM "cars" 
       INNER JOIN "companies" ON "companies"."id" = "cars"."company_id" 
       LEFT JOIN shippers ON shippers.id = cars.shipper_id 
       WHERE (cars.status IS NULL
                AND cars.delivered < '2021-01-14'
                AND ins_file_url IS NOT NULL)

为什么我不能在 ins_file_url 子句中使用别名列 WHERE?这种行为有什么解决方法吗?

提前致谢

解决方法

只需在子查询中使用您的整个查询并对子查询应用 where 条件,如下所示:

Select * from
(SELECT cars.*,manufacturers.company_name AS manufacturer_company_name,companies.mailing_name AS company_mailing_name,(SELECT car_documents.file_url FROM car_documents
         WHERE car_documents.car_id = cars.id AND car_documents.document_type = 1 LIMIT 1) AS ins_file_url,(SELECT car_documents.file_url FROM car_documents
         WHERE car_documents.car_id = cars.id AND car_documents.document_type = 3 LIMIT 1) AS guar_file_url,FROM "cars" 
       INNER JOIN "companies" ON "companies"."id" = "cars"."company_id" 
       LEFT JOIN shippers ON shippers.id = cars.shipper_id
       WHERE cars.status IS NULL
         AND cars.delivered < '2021-01-14' ) t
   Where ins_file_url IS NOT NULL
,

尝试在别名周围使用双引号:

SELECT cars.*,FROM "cars" 
       INNER JOIN "companies" ON "companies"."id" = "cars"."company_id" 
       LEFT JOIN shippers ON shippers.id = cars.shipper_id 
       WHERE (cars.status IS NULL
                AND cars.delivered < '2021-01-14'
                AND "ins_file_url" IS NOT NULL)