如果表2中不存在,如何插入表1?

时间:2012-08-17 01:14:33

标签: mysql sql

我是mysql的新手。如果table2中不存在记录到table1,我有一个问题。我在表格中有2个表table1和table2:

table1

dep_id  start     stop     modified deleted                 
1       23456789  167921525   Yes      No
2       34567812  345678145   Yes      No
3       32789054  327890546   No       No


table2

start     stop     modified deleted                 
23456789  167921525  No       No
34567823  345678145  No       No
32789053  727890546  No       No

我试图仅在table1的“start”和“stop”列中不存在时才将值插入table1的start和stop字段值。如果它存在,我需要抛出一个错误。 这些表没有主键外键关系。 我为不知道正确的语法道歉,但我必须在mysql和PHP中做这样的事情。

Replace Into into table1 set 'start'=> $start,'stop' => $stop
(select 'start','stop' from table2 where table1.start and table1.stop not in table2.start and table2.stop);

在插入table1之前,如何查询这两个表以检查Table1.start和Table1.stop字段是否与Table2.start和Table2.stop不匹配?

3 个答案:

答案 0 :(得分:3)

你可以这样做:

INSERT INTO table1 (start, stop)
SELECT    a.*
FROM      (SELECT 123456789 start, 234567890 stop) a
LEFT JOIN table2 b ON (a.start,a.stop) IN ((b.start,b.stop))
WHERE     b.start IS NULL

123456789234567890分别是startstop的输入值。

然后,您可以根据您正在使用的数据库接口(PDO,mysqli等)使用rowCount或num_rows_affected进行检查。如果为0,则不插入记录,否则插入发生。


SQLFiddle Demo

答案 1 :(得分:0)

我认为这就是你想要的。这需要两个值,$ start和$ stop,如果table2中不存在,则只执行插入:

insert into table1 (start, stop)
    select *
    from (select $start as start, $stop as stop) t
    where not exists (select 1 from table2 where start = $start and stop = $end)

答案 2 :(得分:0)

使用参数化值:

<T extends Enum<T> & ConfigFeature>

这可行但我们通过SQL语句执行INSERT INTO table1 (start, stop) SELECT a.* FROM (SELECT ? start, ? stop) a LEFT JOIN table2 b ON (a.start,a.stop) IN ((b.start,b.stop)) WHERE b.start IS NULL

现在,接口插入记录的解决方案是什么?这是没有SQL语句,在问题中提出了限制。