如何从两个表加载到另一个表的特定属性?

时间:2011-09-28 22:36:56

标签: sql oracle

我正在尝试将两个表中的属性加载到一个表中。

我有一张位置表:

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

但是,在将数据插入新的Users表时,我的语法有问题。

我可以使用以下命令轻松插入非基于位置的字段:

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

但是,我不确定正确的语法,然后添加位置表中的值

1 个答案:

答案 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

如果您需要多个位置(例如“当前居住地”条目),请使用别名并再次加入locations表格(来自users)。