2016-03-05 143 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