3

我是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

仅当 table2 的“开始”和“停止”列中不存在值时,我才尝试将值插入到 table1 的开始和停止字段值中。如果存在,我需要抛出一个错误。这些表没有主键外键关系。我很抱歉不知道正确的语法,但我必须在 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 不匹配?

4

3 回答 3

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分别。

然后,您可以根据您使用的 DB 接口(PDO、mysqli 等)使用 rowCount 或 num_rows_affected 检查它。如果为 0,则没有插入记录,否则,插入发生。


SQLFiddle 演示

于 2012-08-17T01:22:34.220 回答
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)
于 2012-08-17T01:22:18.983 回答
0

使用参数化值:

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

这可行,但我们insert通过 SQL 语句执行。

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

于 2018-03-09T07:07:49.783 回答