我是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不匹配?
答案 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
123456789
和234567890
分别是start
和stop
的输入值。
然后,您可以根据您正在使用的数据库接口(PDO,mysqli等)使用rowCount或num_rows_affected进行检查。如果为0,则不插入记录,否则插入发生。
答案 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语句,在问题中提出了限制。