我想知道如何在符合特定条件的情况下仅在数据库中插入内容。我不想在其中插入任何带有未经授权的值。
事实上,我想做这样的事情:(比方说,我只想插入来自某种类型客户的新订单)
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 ...语句,我无法理解,并且似乎在我的情况下不起作用。)
答案 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;
我不明白为什么需要子查询。