我在Table_A中插入了大量的行。 Table_A包括指向Table_B.B_ID的B_ID列。
表B只有两列:Table_B.B_ID(主键)和Table_B.Name。
我知道除了B_ID之外我插入的每个Table_A字段的值。我只知道相应的Table_B.Name。那么如何在Table_A中插入多行?
这是我想要做的伪代码版本:
REPLACE INTO Table_A (Table_A.A_ID, Table_A.Field, Table_A.B_ID) VALUES
(1, 'foo', [SELECT B_ID FROM Table_B WHERE Table_B.Name = 'A'),
(2, 'bar', [SELECT B_ID FROM Table_B WHERE Table_B.Name = 'B'),...etc
答案 0 :(得分:1)
在将脚本部署到环境中Ids不同的生产环境时,我不得不做这样的事情。否则,输入ID的
可能更容易REPLACE INTO table_a (table_a.a_id, table_a.field, table_a.b_id)
SELECT 1, 'foo', b_id, FROM table_b WHERE name = 'A'
UNION ALL SELECT 2, 'bar', b_id, FROM table_b WHERE name = 'B'
答案 1 :(得分:0)
如果值:
(1, 'foo', 'A'),
(2, 'bar', 'B'),
来自(SELECT ...)
你可以用这个:
INSERT INTO Table_A
( A_ID, Fld, B_ID)
SELECT Data.A_ID
, Data.Field
, Table_B.B_ID
FROM (SELECT ...) As Data
JOIN Table_B
ON Table_B.Name = Data.Name
如果没有,您可以将它们插入临时表中,然后使用上述内容,将(SELECT ...)
替换为TemporaryTable
。
CREATE TABLE HelpTable
( A_ID int
, Fld varchar(200)
, Name varchar(200)
) ;
INSERT INTO HelpTable
VALUES
(1, 'foo', 'A'),
(2, 'bar', 'B'), etc...
;
INSERT INTO Table_A
( A_ID, Field, B_ID)
SELECT HelpTable.A_ID
, HelpTable.Fld
, Table_B.B_ID
FROM HelpTable
JOIN Table_B
ON Table_B.Name = HelpTable.Name
;
DROP TABLE HelpTable ;