需要帮助将mysql查询转换为postgres

时间:2012-08-07 00:48:21

标签: postgresql

我正在搞乱教程 http://www.kendoui.com/blogs/teamblog/posts/12-01-18/get_rolling_with_kendo_ui_and_php_ndash_part_1.aspx

从这里使用postgres northwind端口:   http://code.google.com/p/northwindextended/downloads/detail?name=northwind.postgre.sql

我无法在db:

上执行此查询
SELECT TRIM(t.TerritoryDescription) AS TerritoryDescription
            FROM Territories t                 
            INNER JOIN EmployeeTerritories et ON t.TerritoryID = et.TerritoryID    
            INNER JOIN Employees e ON et.EmployeeID = e.EmployeeID           
            WHERE e.EmployeeID = 1

错误是:

ERROR:  column t.territoryid does not exist
LINE 3:             INNER JOIN EmployeeTerritories et ON t.Territory

但是表格territoriesterritoryid列都在那里。

2 个答案:

答案 0 :(得分:1)

问题是在用于创建数据库的SQL中,您使用的是引用的列名:

CREATE TABLE territories (
    "TerritoryID" character varying(20) NOT NULL,
    "TerritoryDescription" bpchar NOT NULL,
    "RegionID" smallint NOT NULL
);

由于您使用了引用名称,postgres希望列大小写匹配。但是,默认情况下它会将所有列名称小写:

  

PostgreSQL会自动折叠所有标识符(例如表/列)   (名称)在对象创建时和查询时的小写值。   要强制使用混合或大写标识符,您必须转义   标识符使用双引号(“”)。

来自PHP pgsql documentation

因此,在执行查询时,请在""中引用列名。

答案 1 :(得分:0)

谢谢@Adrian Cornish, 这是区分大小写的,所以现在可以使用了:

SELECT TRIM(t."TerritoryDescription") AS "TerritoryDescription"
        FROM Territories t                 
        INNER JOIN employeeterritories et ON t."TerritoryID" = et."TerritoryID"    
        INNER JOIN employees e ON et."EmployeeID" = e."EmployeeID"           
        WHERE e."EmployeeID" = 1