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 ... 语句的答案,我无法理解并且在我的情况下似乎不起作用。)
解决方案
您可以使用模拟子查询中的一个来欺骗它,该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...);
推荐阅读
- algorithm - n维点的凸包中的最大单纯形
- jekyll - 在 Jekyll 中使用静态网页作为主页
- python - pandas 中的 pandas 系列中的多个索引
- postgresql - 数字类型的输入语法无效:“(0.0000000000000000,8)”
- vbscript - 如何通过 VBS 使用 SSO 登录 SAP?
- python - 从 shell 与 cmd 运行 Telegram 的 .lua 脚本
- flutter - Flutter GestureDetector,onTap自动触发,如何?
- html - 过渡不适用于 :before
- regex - 如何编写一个 Scala 正则表达式来捕获两个双引号之间的所有引用内容(包括转义引号)?
- javascript - React中的setState()不更新状态onClick