我有一份作业。我们给了一个表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子句中放入了什么条件呢?
答案 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_id
是patient
中的主要密钥,则应确保在此列中甚至无法拥有重复值或null
。您应该使用约束来确保数据的完整性。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm