【问题标题】:PostgreSQL - column does not existERROR: column "ins_file_url" does not exist [duplicate]PostgreSQL - 列不存在错误:列“ins_file_url”不存在[重复]
【发布时间】:2021-01-21 09:03:48
【问题描述】:

我在 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)

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

提前谢谢你

【问题讨论】:

  • 想象一下,您在某个表中有相同的列,并有一个具有该名称的别名。 DBMS 应该如何知道,列是什么?好的,通过子查询你可以使用像tableAlias.columnName 这样的表别名,但是对于本地计算的列(即在select 列表中)你应该怎么做呢?

标签: sql postgresql column-alias


【解决方案1】:

只需在子查询中使用您的整个查询并在子查询上应用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

【讨论】:

    【解决方案2】:

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

    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)
    

    【讨论】:

    • 它和未引用的一样
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2020-12-04
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多