SQL从多个表插入行

时间:2016-03-05 09:44:10

标签: sql oracle oracle11g sql-update sql-insert

我有一份作业。我们给了一个表MAIN_TABLE,它有一列patient_id作为外键。

我需要创建一个名为patient的单独表,其中patient_id作为主键以及其他一些属性,如姓名和地址。

我成功创建了此表的架构。现在我面临着一个严重的问题。创建此表后,我使用insert语句从虚拟表中插入名称和地址的值。

直到这一点,一切正常。但是,列patient_id仍为空,而我默认将其设置为0。

现在的问题是我需要从MAIN TABLE的patient_id列中获取值到该列的患者id_id。

我无法弄清楚我该怎么办?我确实尝试过使用:

UPDATE patient
SET patient_id=(select id from MAIN_TABLE) 

但是这给了我一个错误,即多行返回哪个有意义,但是我在where子句中放入了什么条件呢?

1 个答案:

答案 0 :(得分:0)

听起来很奇怪。如何使用外键MAIN_TABLE的表patient_id,但主表patient不存在。 patient_id中的MAIN_TABLE来自何处?

我建议不要单独从虚拟表中插入数据,然后尝试更新它。但插入两者 - MAIN_TABLE和虚拟表连接。如果你不能加入他们。在更新期间您也无法使用。

因此,我认为他们没有连接的主键/外键,加入它们的唯一方法是使用一个好的业务键。你有一个好的商业钥匙吗? 你在谈论人。所以名字,姓氏,出生日,地址通常都足够好。但你必须考虑一下。

根据您提供的数据,我只能给您一些元插入语句。但是你会明白这一点。

示例:

insert into patient (col1, col2, col3)
select 
  a.colA, 
  a.colF,
  b.colX
from 
  dummy_table a
    inner join MAIN_TABLE b on a.colN=b.colA and a.colM=b.colB

:如果patient_idpatient中的主要密钥,则应确保在此列中甚至无法拥有重复值或null 。您应该使用约束来确保数据的完整性。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm