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

标签: MySQL PHP
发布时间: 2017/4/9 22:35:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个像这样的条件︰

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
    

解决方法 1:

SELECT MAX(col) FROM tableA给你的最大值在列 col 从表 tableA

我觉得你问做什么是︰

  • 如果 $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 条件插入。)


如何向我查询中添加重复的关键?

您也可以删除 AND NOT EXISTS(SELECT col FROM tableB WHERE col = $val) 因为 col 是独一无二的它可以防止插入重复。

你不需要对重复因为不存在使它无关紧要。 如果你不介意从未遂的重复插入错误,你不需要任何的这︰ 你只是做 INSERT INTO tablaB(col) VALUES(?)

依照我的对重复的条文却没有 op 更新;这避免了需要做到这一点。 我想如果有触发器在桌子上,它不是没有 op 这样 '最后修改' (时间,或用户,或两者) 将更改的列,或如果表的键不是 col 列 — — 这些都是非常深奥难解的可能性,虽然。 你可以通过显示大纲架构表指示这种功能的帮助。

如果你真的需要对重复子句,您可以阅读的手动以及以及添加后的选择。

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)

(和,当然,如果你真的不想不 EXISTS 子句,您可以删除它。)

官方微信
官方QQ群
31647020