SQL错误 - 语法错误

kin*_*005 4 sql t-sql sql-server

我有以下T-SQL查询从一系列表中删除记录:

DELETE FROM config INNER JOIN config_profile ON config.config_id = config_profile.config_id
INNER JOIN config_page ON config_profile.config_profile_id = config_page.config_profile_id
INNER JOIN config_field ON config_page.config_page_id = config_field.config_page_id
INNER JOIN config_constraint ON config_field.config_field_id = config_constraint.config_field_id
INNER JOIN config_constraint_type ON config_constraint.config_constraint_type_id = config_constraint_type.config_constraint_type_id
WHERE config.config_name = 'ConfigName' AND config_profile.profile_name = 'ProfileName'
Run Code Online (Sandbox Code Playgroud)

但它一直在抛出错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'INNER'.
Run Code Online (Sandbox Code Playgroud)

看着它,我不确定我错过了什么.任何帮助表示赞赏.

Con*_*rix 5

你需要两个FROM我知道它很奇怪

DELETE 
FROM CONfig 
FROM 
config 
INNER JOIN config_profile ON config.config_id = config_profile.config_id
INNER JOIN config_page ON config_profile.config_profile_id = config_page.config_profile_id
INNER JOIN config_field ON config_page.config_page_id = config_field.config_page_id
INNER JOIN config_constraint ON config_field.config_field_id = config_constraint.config_field_id
INNER JOIN config_constraint_type ON config_constraint.config_constraint_type_id = config_constraint_type.config_constraint_type_id
WHERE config.config_name = 'ConfigName' AND config_profile.profile_name = 'ProfileName'
Run Code Online (Sandbox Code Playgroud)

如果您在这里查看在线帮助的语法

[ WITH <common_table_expression> [ ,...n ] ]
DELETE 
    [ TOP (expression ) [ PERCENT ] ] 
    [ FROM ] 
    { <object> | rowset_function_limited 
      [ WITH ( <table_hint_limited> [ ...n ] ) ]
    }
    [ <OUTPUT Clause> ]
    [ FROM <table_source> [ ,...n ] ] 
    [ WHERE { <search_condition> 
            | { [ CURRENT OF 
                   { { [ GLOBAL ] cursor_name } 
                       | cursor_variable_name 
                   } 
                ]
              }
            } 
    ] 
    [ OPTION ( <Query Hint> [ ,...n ] ) ] 
[; ]

<object> ::=
{ 

    [ server_name.database_name.schema_name. 
      | database_name. [ schema_name ] . 
      | schema_name.
    ]
    table_or_view_name 
}
Run Code Online (Sandbox Code Playgroud)

第一个是

FROM是一个可选关键字,可以在DELETE关键字和目标table_or_view_name或rowset_function_limited之间使用.

第二个来自

FROM指定其他FROM子句.DELETE的Transact-SQL扩展允许从第一个FROM子句中的表中指定数据并从中删除相应的行.

可以使用此扩展(指定连接)代替WHERE子句中的子查询来标识要删除的行.

有关更多信息,请参阅FROM(Transact-SQL).

正如托尼指出的那样,你可以选择删除第一个FROM,这样它的可读性就会提高一些

DELETE 
   Config 
FROM 
   config ....
Run Code Online (Sandbox Code Playgroud)