在SQL语法中,如果您打算使用'where',那么'delete from'中的'from'是可选的吗?

Ham*_*jan 17 sql t-sql delete-row sql-delete

我是SQL的新手.我们有一些代码可以在SQL Server 2005/2008,Oracle 10和Sybase上运行.

我正在编写一个脚本来试图找出给定存储过程修改(但不丢弃)的表,例如insert,updatedelete.

delete一个竟然是令人费解的-有时我看到这样的语句:

delete phone_book where ... 
Run Code Online (Sandbox Code Playgroud)

而不是:

delete from phone_book where ...
Run Code Online (Sandbox Code Playgroud)

那么...... from在这种情况下,关键字真的是可选的吗?这会导致任何问题吗?这只是一种糟糕的风格,还是无所谓?

我还没有找到一个参考T-SQL,这将使from可选.我想这可以统一我上面提到的所有3个供应商.

欢迎提出问题/意见/链接(或者是否欢迎?).

Luc*_*ero 10

在这个地方FROM是可选的(SQL Server,Oracle,Sybase).

但是,存在细微差别:例如,Oracle允许为表名指定别名,而SQL Server则不允许; 和其他事情也有点不同.

另请注意,您的FROM样本与强制要求的以下内容不同:

DELETE phone_book FROM some_table WHERE ...
Run Code Online (Sandbox Code Playgroud)

  • @Hamish,请看一下我在第一行发布的三个链接.我的`some_table`是源表,可用于获取之后在`WHERE`子句中匹配的值,以过滤要从`phone_book`中删除的项.它也可以写成:`DELETE FROM phone_book FROM some_table WHERE ...` - 但正如我所写,在这种情况下只有第一个`FROM`是可选的. (2认同)

ber*_*d_k 7

简答:Luceros的答案是正确的:它是选择性的

我必须维护sql并在sql-server和Oracle之间进行调整.这里有一些规则:

  1. 手动编写脚本,不要使用生成的代码
  2. 总是使用INSERT INTO
  3. 永远DELETE - 没有FROM
  4. 不要使用" - 引用标识符
  5. 删除所有[]和dbo.
  6. 当你看到DELETE ... FROM时注意......
  7. 当你看到UPDATE ... FROM时注意......
  8. ORACLE Select语句需要来自DUAL的Clause

    1. 好的,您可以编写脚本脚本并以标准方式编辑它们
      • USE [Current_DB] - 您不希望对测试数据库的引用进入生产脚本
      • SET ANSI_NULLS ON - 决定使用哪种设置 - 不要打开和关闭
      • SET QUOTED_IDENTIFIER ON - 带引号的标识符区分大小写
    2. ORACLE需要INSERT INTo
    3. 那是我的个人风格,不要使用optinal关键字,学习默认值
    4. 你必须引用一个标识符,如果你使用ORACLES保留关键字之一作为列nam e,我们输入了这个陷阱,从长远来看,最好重命名sql-Server端的列
    5. ORACLE不使用这些
    6. Oracle不支持此语法
    7. Oracle不支持此语法