我想知道如何在我的数据库中插入一些东西只有当它符合特定条件时。我不想在其中插入任何未经授权的值。
事实上,我想做这样的事情:(假设我只想插入来自特定类型客户的新订单)
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 ... 语句,我无法理解并且似乎 不适用于我的情况。)
最佳答案
您可以使用模拟子查询中的 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...);
关于mysql - 如何在 SQL 中执行条件插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55752822/