如何在SQL中进行条件插入

时间:2019-04-18 19:45:38

标签: mysql 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 ...语句,我无法理解,并且似乎在我的情况下不起作用。)

2 个答案:

答案 0 :(得分:3)

您可以使用模拟子查询中的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...);

答案 1 :(得分:1)

这是您想要的吗?

INSERT INTO orders (columns names)
    SELECT . . .
    FROM clients
    WHERE condition;

我不明白为什么需要子查询。