2015-10-01 120 views
0

我得到f插入從單個插入和select語句多行

Table d 
-------- 

id number 
1 23 
1 24 
1 25 
2 22 
2 23 

我需要插入到表F像

INSERT INTO f 
SELECT max(f)+1, 
(select d.number from d where number = 1), 
FROM f 

表F需要一個表d和表是

id d.id  d.number 
1  1   23 
2  1   24 
3  1   25 

我必須選擇3行並用一個選擇查詢插入到該表中。

+0

請在您要查找的RDBMS(如Sql Server,Oracle,MySQL)中添加標籤。 –

+0

你可以添加更多細節嗎?這些行應該滿足什麼條件才能插入表f中。 – brenners1302

+0

在你的例子中,你的意思是'where number = 1)'或'where id = 1)'? –

回答

0

您只需在子查詢和外部查詢中指定正確的列名。

INSERT INTO f VALUES (id,number) (SELECT id,number FROM d WHERE id = 1) 

而且你不能根據f爲d.idd.number爲外鍵指idnumberd不能在非主鍵列設置。

2

您可以通過下面的SQL查詢做,

INSERT INTO f 
VALUES 
    (
    id, 
    idNew, 
    number 
) 
SELECT ROW_NUMBER() OVER(ORDER BY Id) AS RowNumber, 
     d.id, 
     d.number 
FROM d 
WHERE id = 1 
0

首先,讓我們設置你的表定義:http://sqlfiddle.com/#!6/6b644c/1

create table d (id int, num int); 
create table f (id int, d_id int, d_num int); 

insert into d (id, num) values 
(1,23), 
(1,24), 
(1,25), 
(2,22), 
(2,23); 

那麼這應該得到您所指定的結果。

insert into f (id, d_id, d_num) 
    select row_number() over (order by num), d.id, d.num 
    from d 
    where d.id = 1; 

如果你想重新開始新id計數器爲每個現有的,則包括partition by條款並留下關閉where這樣的:http://sqlfiddle.com/#!6/d9906/1

insert into f (id, d_id, d_num) 
    select row_number() over (partition by id order by num), d.id, d.num 
    from d