2011-09-28 43 views
0

我想从两个表加载属性到一个表。如何将两个表中的特定属性加载到另一个表中?

我有一个位置表:

Id City  State  Country 
=============================== 
1 New York New York USA 
2 Portland Oregon USA 
3 Tokyo  Honshu Japan 

和用户表:

Id First_Name Last_Name Hometown_City Hometown_State Hometown_Country 
=========================================================================== 
1 Brett  Burr  New York  New York  USA 
2 Bucky  Beaver  Portland  Oregon   USA 
3 Ranma  Saotome Tokyo   Honshu   Japan 

我为用户创造一个新表,而不是包含单独Hometown领域,有一个Hometown_Id外键。

喜欢的东西:

Id First_Name Last_Name Hometown_Id 
======================================== 
1 Brett  Burr  1 
2 Bucky  Beaver  2 
3 Ranma  Saotome 3 

不过,我的数据插入到新的用户表时具有的语法有问题。

我可以用这样的命令轻松地插入非基于位置的字段:

INSERT INTO newusers (Id, First_Name, Last_Name) 
SELECT DISTINCT Id, First_Name, Last_Name 
FROM users 

但是,我不知道正确的语法来然后从位置表中的值相加

+0

您可能想加入(城市,州,国家)两个表。 –

+0

你能否更详细地解释你的意思?我应该加入哪两张表,结果如何? –

+0

我不认为你的意思是“属性”,我认为你的意思是数据。表的一个属性是它的列数。 –

回答

0

假设你有适当的约束,那Location表中包含的唯一条目,下面应该工作:

INSERT INTO newusers (Id, First_Name, Last_Name, Hometown_Id) 
SELECT users.Id, users.First_Name, users.Last_Name, locations.Id 
FROM users 
INNER JOIN locations 
ON locations.City = users.Hometown_City 
AND locations.State = users.Hometown_State 
AND locations.Country = users.Hometown_Country 

如果你有更多的T需要一个位置(例如“当前居住”条目),别名和第二次加入locations表(从users)。

+0

我很抱歉,但我得到一个错误说 Hometown_Id 无效的 –

+0

@ByungkuneChoi这可能是因为'Hometown_Id'是不存在的一个表中提到 – Sathya

+0

@ByungkuneChoi - 如果你会发现,我编辑你的问题(通过格式化查询,并减少列出的列数 - 'hometown'和'current'基本上是相同的想法)。你将不得不修改你的查询以适应你实际的表结构;放心,这是一个很好的学习机会! –

相关问题