This question was migrated来自数据库管理员堆栈交换,因为它可以在堆栈溢出时得到响应。
Migrated去年。
我尝试运行一个简单的代码,如下所示:
但我得到的是
错误:列引用“city”不明确。
我的代码怎么了?
注意,我使用了一个整数来表示表的ID和主键,并分别存储了城市的名称。这为您提供了一个易于维护的查找表。通过使用一个整数作为主键,我们在存储数据时还将在天气表中使用较少的空间。
请注意,我存储的是城市的id,而不是名称。另外,我已经重命名了
确保我们在测试数据中使用id:
你以前的问题:
名称不明确,因为两个表都有一个
使用我在上面所做的更改,您需要如下内容:
或者,使用新的连接语法:
这两个查询在功能上是等价的——现在大多数人更喜欢第二个查询,因为它可以防止错误(例如:忘记实际加入
Migrated去年。
我尝试运行一个简单的代码,如下所示:
Create Table weather (
city varchar(80),
temp_lo int,
temp_hi int,
prcp real,
date date
);
Insert Into weather Values ('A', -5, 40, 25, '2018-01-10');
Insert Into weather Values ('B', 5, 45, 15, '2018-02-10');
Create Table cities (
city varchar(80),
location point
);
Insert Into cities Values ('A', '(12,10)');
Insert Into cities Values ('B', '(6,4)');
Insert Into cities Values ('C', '(18,13)');
Select * From cities, weather Where city = 'A'
但我得到的是
错误:列引用“city”不明确。
我的代码怎么了?
最佳答案
如果我是你,我会用稍微不同的方式来建模。
为了使事情正常化一点,我们将从cities表开始进行一些更改:
create table cities (
city_id integer primary key,
city_name varchar(100),
location point
);
注意,我使用了一个整数来表示表的ID和主键,并分别存储了城市的名称。这为您提供了一个易于维护的查找表。通过使用一个整数作为主键,我们在存储数据时还将在天气表中使用较少的空间。
Create Table weather (
city_id integer,
temp_lo int,
temp_hi int,
prcp real,
record_date date
);
请注意,我存储的是城市的id,而不是名称。另外,我已经重命名了
date
,因为用SQL reserved words命名列不是一个好主意。确保我们在测试数据中使用id:
Insert Into weather Values (1, -5, 40, 25, '2018-01-10');
Insert Into weather Values (2, 5, 45, 15, '2018-02-10');
Insert Into cities Values (1,'A', '(12,10)');
Insert Into cities Values (2,'B', '(6,4)');
Insert Into cities Values (3,'C', '(18,13)');
你以前的问题:
Select * From cities, weather Where city = 'A'
名称不明确,因为两个表都有一个
city
列,而且数据库引擎不知道您指的是哪个city
(它不会自动知道是否需要使用cities.city或weather.city)。查询还执行cartesian product,因为您尚未将表连接在一起。使用我在上面所做的更改,您需要如下内容:
Select *
From cities, weather
Where cities.city_id = weather.city_id
and city_name = 'A';
或者,使用新的连接语法:
Select *
From cities
join weather on cities.city_id = weather.city_id
Where city_name = 'A';
这两个查询在功能上是等价的——现在大多数人更喜欢第二个查询,因为它可以防止错误(例如:忘记实际加入
where
子句)。关于postgresql - 列引用含糊不清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51754758/
10-16 14:56