从这里使用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
但是表格territories
和territoryid
列都在那里。
答案 0 :(得分:1)
问题是在用于创建数据库的SQL中,您使用的是引用的列名:
CREATE TABLE territories (
"TerritoryID" character varying(20) NOT NULL,
"TerritoryDescription" bpchar NOT NULL,
"RegionID" smallint NOT NULL
);
由于您使用了引用名称,postgres希望列大小写匹配。但是,默认情况下它会将所有列名称小写:
PostgreSQL会自动折叠所有标识符(例如表/列) (名称)在对象创建时和查询时的小写值。 要强制使用混合或大写标识符,您必须转义 标识符使用双引号(“”)。
因此,在执行查询时,请在""
中引用列名。
答案 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