[英]How to check if a value exists in tableA before inserting in tableB?
我有这样的条件:
0 < $var < (SELECT col FROM tableA ORDER BY col DESC LIMIT 1)
我也有这样的INSERT
查询:
INSERT INTO tableB (col) VALUES (?) ON DUPLICATE KEY UPDATE col = VALUE(col)
现在我想知道,我怎样才能在MySQL中实现它:
如果上述条件为真,那么插入新行,否则什么都不做或者给我一个错误?
if (condition == true) then insert into table
SELECT MAX(col) FROM tableA
为您提供表tableA
中列col
的最大值。
我想你要做的是:
$val
(来自某处的值 - 可能是您的PHP)大于0且小于表tableA
存储的最大值,则确保该值出现在表tableB
。 如果是这样,您可以使用:
INSERT INTO tableB(col)
SELECT $val
FROM dual
WHERE $val > 0
AND $val < (SELECT MAX(col) FROM tableA)
AND NOT EXISTS(SELECT col FROM tableB WHERE col = $val)
您现在需要将其转换为适当的PHP。
(另请参阅MySQL条件插入 。)
如何在查询中添加ON DUPLICATE KEY?
您还可以删除
AND NOT EXISTS(SELECT col FROM tableB WHERE col = $val)
因为col
是唯一的,它可以防止插入重复。
你不需要ON DUPLICATE,因为NOT EXISTS使它无关紧要。 如果你不介意尝试重复插入的错误,你不需要任何这个:你只需要INSERT INTO tablaB(col) VALUES(?)
。
AFAICS,ON DUPLICATE子句执行no-op UPDATE; 这避免了这样做的必要性。 我认为如果表上有触发器以便更改“最后修改的”(时间,用户或两者)列,或者如果表的键不是,那么它就不会是无操作col
列 - 这些都是非常深奥的可能性。 您可以通过显示表格的大纲架构来指示这些功能。
如果你真的需要ON DUPLICATE子句,你可以阅读本手册 ,并在SELECT之后添加它。
INSERT INTO tableB(col)
SELECT $val
FROM dual
WHERE $val > 0
AND $val < (SELECT MAX(col) FROM tableA)
AND NOT EXISTS(SELECT col FROM tableB WHERE col = $val)
ON DUPLICATE KEY UPDATE col = VALUE(col)
(当然,如果你真的不想要NOT EXISTS子句,你可以删除它。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.