-1

我在搞一个教程 http: //www.kendoui.c​​om/blogs/teamblog/posts/12-01-18/get_rolling_with_kendo_ui_and_php_ndash_part_1.aspx

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

我无法在数据库上执行此查询:

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

错误是:

错误:列 t.territoryid 不存在
第 3 行:INNER JOIN EmployeeTerritories et ON t.Territory

但是表格territoriesterritoryid列都在那里。

4

2 回答 2

1

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

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

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

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

来自PHP pgsql 文档

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

于 2012-08-07T01:14:46.387 回答
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
于 2012-08-07T01:14:18.463 回答