首页 > 解决方案 > 如何在 SQL 中进行条件插入

问题描述

我想知道只有在符合某些条件的情况下才能在我的数据库中插入一些东西。我不想在其中插入任何具有未经授权值的内容。

事实上,我想做这样的事情:(假设我只想插入来自某种类型的客户的新订单)

    INSERT INTO orders
    (columns names)
    VALUES (values)
    WHERE orders.client_id IN (SELECT id FROM clients WHERE condition...)

(我知道这是不可能的,这就是例子。)

我试过这个:

    INSERT INTO orders
    (columns names)
    VALUES (values);
    DELETE orders
    WHERE orders.client_id NOT IN (SELECT id FROM clients WHERE condition...)
    ORDER BY id DESC LIMIT 1

它似乎可以解决问题。但我不敢相信这是一个很好的解决方案。

所以我的问题是:有没有办法正确地做到这一点,而且只有一个请求?

(我发现很多关于主题的帖子或多或少类似于这个主题,但他们中的大多数都有一个 INSERT INTO ... SELECT ... 语句的答案,我无法理解并且在我的情况下似乎不起作用。)

标签: mysqlsql

解决方案


您可以使用模拟子查询中的一个来欺骗它,该SELECT子查询将允许您使用 where 子句。

     INSERT INTO orders
     (client_id, ...)
     SELECT client_id, ...
     FROM (SELECT 'your_value' AS client_id, ...) foo
     WHERE client_id IN (SELECT id FROM clients WHERE condition...);

推荐阅读