2016-03-05 60 views
0

我有一个任务。我们给了一个表MAIN_TABLE,它有一个列patient_id作为外键。SQL从多个表插入行

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

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

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

现在的问题是,我需要从MAIN TABLE的patient_id列中将值读入此列patient_id。

我不明白我该怎么做?我曾尝试使用:

UPDATE patient 
SET patient_id=(select id from MAIN_TABLE) 

但是这给了我错误多行返回其一定道理,但我把什么条件在where子句呢?

+2

你刚才问的问题清晰,并给所有列在虚表,并命令你必须在虚拟表中插入patient_id值。 – 2016-03-05 10:14:12

+0

你正在使用哪些DBMS? –

+0

@a_horse_with_no_name我使用Sql,我需要从虚拟表中复制一些列,并从MAIN_TABLE复制一个列 –

回答

0

这听起来很奇怪。如何能有一个表MAIN_TABLE与外键patient_id但主表patient不存在。 MAIN_TABLE来自哪里patient_id s?

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

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

用你给定的数据我只能给你一些meta插入语句。但你会明白这一点。

例子:

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