Select
如何在 select 語句給出唯一值時多次執行 insert 語句?
DB火鳥。
我有以下聲明
SELECT a.ID FROM CLIENTS a
我希望我的 INSERT 語句到另一個表中以使用每個值,例如
INSERT INTO BANKS (ID, NR, MONEY) VALUES ( gen_id(gen_name, 1), "there should be client ID from the SELECT statement above", 3000 )
我可以通過一個聲明來實現這一目標嗎?
為此,您可以使用
insert ... select
:insert into banks(ID, NR, MONEY) select gen_id(gen_name, 1), ID, 3000 from CLIENTS
如果您有一個觸發器在
CLIENTS
插入時生成 ID,或者 - Firebird 3 -ID
是一個標識列,那麼您可以將其簡化為:insert into banks(NR, MONEY) select ID, 3000 from CLIENTS
你的問題有點不清楚。我更像是一個 Sql Server 人,但我相信 Firebird 支持 ROW_NUMBER 函式。以下是使用該函式自動遞增的 Sql Server 範例。
DECLARE @Client TABLE (ID INT); DECLARE @Banks TABLE (ID INT,NR INT,MONEY DECIMAL(11, 2)); INSERT INTO @Client (ID) VALUES (1),(2),(3); INSERT INTO @Banks (ID,NR,MONEY) SELECT 100 + ROW_NUMBER() OVER (ORDER BY id) AS ID,0 AS NR,0 AS MONEY FROM @Client; SELECT * FROM @Banks;
如果您只想在 Banks 表中為 Client 表中的每個相應行插入一行,我認為一個簡單的 INSERT/SELECT 語句會起作用:
INSERT INTO BANKS(ID, NR, MONEY) SELECT ID, 0, 0 FROM CLIENT;
如果您的意圖是將客戶端的每一行(其中客戶端 ID 成為 BANK 上的 NR 列)插入 BANK,並且您想“自動增加”BANK 上的 ID,那麼這應該可以:
DECLARE @Client TABLE (ID INT); DECLARE @Banks TABLE (ID INT,NR INT,MONEY DECIMAL(11, 2)); INSERT INTO @Client (ID) VALUES (1),(2),(3); INSERT INTO @Banks (ID,NR,MONEY) SELECT ROW_NUMBER() OVER (ORDER BY id) AS ID,id AS NR,0 AS MONEY FROM @Client; SELECT * FROM @Banks;