我正在尝试设置一个MySQL查询,如果table1中已存在一行,则会在table2中插入一行,否则只会将该行插入table1。
我需要找到一种方法来调整以下查询,使用现有行的id将行插入table2。
INSERT INTO table1(主机,路径)VALUES('youtube.com','/ watch')如果不是
EXISTS(SELECT * FROM table1 WHERE host ='youtube.com'AND path ='/ watch'LIMIT 1);
有点像这样:
INSERT ...如果不是EXISTS(..)ELSE INSERT INTO table2(table1_id)VALUES(row.id);
除了我不知道这个的语法。
答案 0 :(得分:1)
您可以在table1上使用触发器,唯一键或主键,以及INSERT IGNORE。
如果在table1中插入已存在的值,INSERT IGNORE将不会返回重复键错误。 触发器将仅检查table1中是否已存在该值并将其插入table2。 如果需要,还可以在table2上添加唯一键,并在触发器中使用INSERT IGNORE。
上帝好运!
CREATE TABLE `table1` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;
CREATE TABLE `table2` (
`id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
DELIMITER $$
CREATE
DEFINER = CURRENT_USER
TRIGGER `table1_insert` BEFORE INSERT
ON table1
FOR EACH ROW BEGIN
if exists (select * from table1 where id = new.id) then
insert into table2 (id) values (new.id);
end if;
END$$
DELIMITER ;
insert ignore into table1(id) values(1);
select * from table1;
select * from table2;
答案 1 :(得分:0)
你可以用INSERT INTO SELECT
来实现这一目标。我相信。
INSERT INTO
table1 (host, path)
SELECT
table2.host, table2.path
FROM
table2
WHERE
table2.host='youtube.com' AND path='/watch'
LIMIT 1;
免责声明:未经测试。
答案 2 :(得分:0)
这是我提出的解决方案:
CREATE TRIGGER onUpdate BEFORE UPDATE ON table1 FOR EACH ROW INSERT INTO table2 SET t1_row = OLD.id