2016-11-18 16 views
0

我正在創建一個以uuids作爲主鍵的sql文件。下面是我創建的表定義看起來像使用pgcrypto擴展使用uuids生成sql文件並將這些id進一步轉換爲postgres9.5

CREATE EXTENSION pgcrypto; 
CREATE TABLE snw.contacts( 
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
    name TEXT, 
    email TEXT 
); 

現在我在使用這個表中添加一條記錄

INSERT INTO snw.contacts (name,email) VALUES('Dr Nic Williams','drnic'); 

postgres=# select * from snw.contacts; 
        id     |  name  | email 
--------------------------------------+-----------------+------- 
7c627ee0-ac94-40ee-b39d-071299a55c13 | Dr Nic Williams | drnic 

現在在同一文件中走在前面我想在一箇中插入一行的表看起來像

CREATE TABLE snw.address( 
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
    street TEXT 
    contact UUID 
); 

其中聯繫UUID引用snw.contacts表中的ID。 ?我如何獲取這是在第一次插入產生的UUID,並在snw.address表使用它的另一嵌件事情是:

INSERT INTO snw.address(street,contact) values('ABC', (select id from snw.contacts where email='drnic')); 

我可以用where子句我使用這個腳本生成一些測試數據,所以我知道電子郵件將用於獲取id。

+0

爲什麼'SQL-server'標籤? –

+0

我刪除了顯然無關的'sql-server'標籤 –

回答

1

使用data modifying CTE:

with new_contact as (
    INSERT INTO snw.contacts (name,email) 
    VALUES('Dr Nic Williams','drnic') 
    returning id 
) 
INSERT INTO snw.address(street,contact) 
select 'ABC', id 
from new_contact; 
相關問題