繁体   English   中英

如何在插入tableB之前检查tableA中是否存在值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM