我有两个表,将值存储为VARCHAR。 我正在填充表,如果其他表中不存在值,则只想在其中一个表中插入值。 就像是:
VARCHAR
INSERT IF IS EMPTY(SELECT * FROM t1 where v='test') INTO t2 (v) VALUES ('test')
我怎样才能做到这一点?
您需要使用某种类型的INSERT...SELECT查询。
INSERT...SELECT
更新(在澄清之后): 例如,t2如果相应的行在中尚不存在,则下面是如何在其中插入行t1:
t2
t1
INSERT INTO t2 (v) SELECT temp.candidate FROM (SELECT 'test' AS candidate) temp LEFT JOIN t1 ON t1.v = temp.candidate WHERE t1.v IS NULL
要用同一查询插入多行,恐怕没有什么比这更好的了
INSERT INTO t2 (v) SELECT temp.candidate FROM ( SELECT 'test1' AS candidate UNION SELECT 'test2' UNION SELECT 'test3' -- etc ) temp LEFT JOIN t1 ON t1.v = temp.candidate WHERE t1.v IS NULL
原始答案
例如,这将从满足该子句的other_column所有行中提取table1,WHERE并table2使用用作的值插入行column_name。它将忽略重复的键错误。
other_column
table1
WHERE
table2
column_name
INSERT IGNORE INTO table2 (column_name) SELECT table1.other_column FROM table1 WHERE table1.something == 'filter';