我是mysql的新手。我在将记录插入到table1中时遇到问题,如果它在table2中不存在。我有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不匹配?
你可以做:
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,则不插入任何记录,否则,发生插入。
SQLFiddle演示
问题内容: 我从谷歌搜索开始,发现这篇文章讨论了互斥表。 我有一张约有1400万条记录的表。如果我想以相同的格式添加更多数据,是否有一种方法可以确保我要插入的记录在不使用一对查询的情况下就不存在(即,要检查的一个查询和要插入的一个查询是结果集是空的)? 字段上的约束是否可以确保如果该约束已经存在,该约束将失败? 似乎 只有 一个约束条件,当我通过php发出插入命令时,脚本就发出了嘎嘎叫声。 问题答
问题内容: 我有下表: 如果给定的ID不存在,我想插入具有默认Val的ID。但是,如果它已经存在,我想增加Val的值。 我有以下代码: 并且它可以工作,但是我想用一个SQL语句来完成。我可以吗? 编辑 : 从@ Xikinho90的答案,我的最终代码是 问题答案: 您可以使用插入或替换。 我认为这可以解决问题 您只需要用输入的ID替换数字 谢谢奇科
问题内容: 我正在尝试执行以下查询: 但这会返回错误。基本上,如果该记录的“名称”字段已经存在于另一条记录中,我不想插入一条记录-如何检查新名称是否唯一? 问题答案: 我实际上并不建议您这样做,因为Piskvor和其他人建议的索引是一种更好的方法,但是您实际上可以做您想做的事情: 插入一条记录: 尝试再次插入相同的记录: 插入其他记录: 等等… 更新: 为了防止在两个值相等的情况下出错,您必须命名
问题内容: 我有下表的计数器: 我想增加一个计数器,如果相应的行还不存在,则将其设置为零。有没有办法在标准SQL中没有并发问题的情况下做到这一点?该操作有时是事务的一部分,有时是独立的。 如果可能,SQL必须在SQLite,PostgreSQL和MySQL上未经修改地运行。 搜索产生了一些想法,这些想法可能遇到并发问题,或者特定于数据库: 尝试到新行,如果有错误。不幸的是,该错误会中止当前事务。
问题内容: 我从谷歌搜索开始,发现这篇文章讨论了互斥表。 我有一张约有1400万条记录的表。如果我想添加更多相同格式的数据,是否有一种方法可以确保在不使用一对查询的情况下我要插入的记录不存在(即,要检查的一个查询和要插入的一个是结果集是空)? 如果字段上存在约束,是否可以保证该约束将失败? 似乎 只有 一个约束,当我通过php发出插入命令时,脚本就发出了嘶哑的声音。 问题答案: 采用 见http:
问题内容: 是否有只查询记录的查询,如果不存在,则插入?我不想重复更新或替换。寻找一个查询解决方案,寻找其他答案,但不是我真正想要的。 表: 伪查询: 问题答案: 使用-与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前会删除该旧行。 http://dev.mysql.com/doc/refman/5.0/en/rep