【问题标题】:Insert query with condition插入带条件的查询
【发布时间】:2014-05-16 23:48:18
【问题描述】:

我正在尝试创建一个 SQL 查询,其中我需要检查 2 个表中的列的总和,然后在满足条件时将新行插入到另一个表中。我知道我可以使用具有显式锁定的存储过程,但想知道是否可以在单个 SQL 查询中执行此操作。我写了以下内容,但它在 MySQL 工作台中给出了语法错误

INSERT INTO table1 (`col1`, `col2`) 
VALUES ('abc', 'xyz') WHERE 
(
((select 
COUNT(*) from table2 t2 where t2.id = 1)
+ (select sum(t3.counter) from table3 t3 
WHERE t3.id = 1)) < (select t4.total_allowed 
FROM table4 t4 where t4.id = 1)
);

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这可以做到,因为你可以insert the results of a select query

    INSERT INTO table1 (`col1`, `col2`) 
    SELECT 'abc', 'xyz'
    FROM DUAL WHERE 
    (
    ((select 
    COUNT(*) from table2 t2 where t2.id = 1)
    + (select sum(t3.counter) from table3 t3 
    WHERE t3.id = 1)) < (select t4.total_allowed 
    FROM table4 t4 where t4.id = 1)
    );
    

    【讨论】:

    • 你打败了我。我将添加以下内容作为参考。 click here.
    【解决方案2】:

    MySQL INSERT 语法不支持WHERE 子句。

    【讨论】:

    • 那么有没有其他方法可以在 MySQL 的 SQL 语句中检查这种情况?
    • 恐怕你必须使用多个查询。
    • 但是多个查询不会受到竞争条件的影响吗? (假设我使用 JDBC 在单个事务中执行查询)。存储过程是避免这种情况的唯一方法吗?
    • 看看 REPLACE 查询是否完成了你的工作,在事务中它应该不会产生任何问题
    • 但我认为 REPLACE 可能不是您的解决方案。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 2020-12-18
    相关资源
    最近更新 更多