【问题标题】:Place an Insert Statement into a Select Statement将插入语句放入 Select 语句中
【发布时间】:2016-09-01 22:41:30
【问题描述】:

我已阅读其他问题以及所有已发布的 cmets/与此问题类似的问题的答案。他们似乎都没有直接回答这个问题。

我想知道是否有办法将INSERTDELETEUPDATE 语句连接或放置到SELECT 语句中。

如果有怎么办?这可以通过使用derived table 函数或subSelect 语句来完成吗?

例如:


INSERT INTO Customer (name)
VALUES 'Test Name'

但将其放入 SELECT 语句中

示例伪代码:


SELECT *
FROM Customer
WHERE
Customer.name = (INSERT INTO Customer (name) VALUES 'Test Name')

这里最重要的是以一种非常规的方式将 INSERT 语句放入 SELECT 语句中。

谢谢你,希望这会引发一些很好的对话/想法/结果!

想知道这个的原因:

  1. 我们当前的 DBMS (Fishbowl) 不允许我们在 SQL 编译器中使用 UPDATE、DELETE 或 INSERT 语句,我们希望大规模更改字段/清理表。
  2. 了解是否可行

【问题讨论】:

  • 您是否有某个特定的问题要解决,或者这是一个练习?
  • 任何数据库都不允许这种语法,所以我猜答案是“否”。 Postgres 确实做了类似的事情,在 CTE 中允许使用 DML 语句。 MySQL 在单个语句中没有任何类似的功能。
  • 您是否尝试生成类似这样的脚本? select 'INSERT INTO' || customer.name || ' VALUES 'Test Name' ' from customer
  • 我猜他的目标是插入到他的用户只有 SELECT 权限的数据库中
  • @Ashton 如果您无权插入或删除,那么您将无法在脚本生成后运行该脚本。您可以提出一个 proc 来生成和执行脚本并将其移交或通过具有特权的用户安排它。当我需要根据数据库表中的数据和/或标准进行大规模更新/插入时,这是我过去使用的方法。

标签: mysql sql subquery sql-insert derived-table


【解决方案1】:

您可能在insert 中有一个select,但反之则不然 周围。

insert 中的选择 语句可用于将值从一个表复制到另一个。 (您只是在读取另一个表格后写入表格

但是在选择中插入没有意义!当您从表中运行选择(或仅读取数据)时,您要插入什么?(当您只被允许读取时,怎么可能写入?)

你的情况,如果你无权运行插入,那么你把语句放在哪里都没关系,你不能因为你不被允许!

但是,如果您正在谈论您的查询引擎/数据库包装器不允许直接插入,那么可能是因为它需要应用程序/程序将数据插入到而不只是查询中(因为您的引擎还没有执行该操作的能力)。

【讨论】:

  • 你说得对,这没有意义!这就是为什么我想接受这个想法,看看它还会产生什么。我当前的 DBMS 不允许我在它的编译器中使用除了 SELECT 语句之外的任何东西,我想要一种解决方法。感谢您的输入/回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2012-03-19
  • 1970-01-01
相关资源
最近更新 更多