Tsql 为什么不是';";不(<;搜索条件>;)";列在定义中?

Tsql 为什么不是';";不(<;搜索条件>;)";列在定义中?,tsql,Tsql,根据测试,WHERE NOT是有效的SQL语法 where not ( x = 10 y > 5 ) 然而,我并没有从定义上理解: 对我来说,搜索条件的T-SQL定义似乎不允许生成NOT()” spec/docs使它看起来像一元否定的唯一合法目标是谓词。要生成not(),似乎需要语句位于连接或断开的右侧……spec不正确,还是我缺少生成该语句的方法 < search_condition > ::= { [ NOT ] <predicate> | (

根据测试,
WHERE NOT
是有效的SQL语法

 where  not ( x = 10  y > 5 )
然而,我并没有从定义上理解:

对我来说,搜索条件的T-SQL定义似乎不允许生成
NOT()

spec/docs使它看起来像一元否定的唯一合法目标是谓词。要生成
not()
,似乎需要语句位于连接或断开的右侧……spec不正确,还是我缺少生成该语句的方法

< search_condition > ::= 
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...n ] 
<predicate> ::= 
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression 
    | string_expression [ NOT ] LIKE string_expression 
  [ ESCAPE 'escape_character' ] 
    | expression [ NOT ] BETWEEN expression AND expression 
    | expression IS [ NOT ] NULL 
    | CONTAINS 
  ( { column | * } ,'< contains_search_condition >') 
    | FREETEXT ( { column | * } ,'freetext_string') 
    | expression [ NOT ] IN (subquery | expression [ ,...n ] ) 
    | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } 
  { ALL | SOME | ANY} (subquery) 
    | EXISTS (subquery)     } 
:=
{[不]|()}
[{和|或}[不]{|()}]
[,…n]
::= 
{表达式{=|<>|!=|>=|!>=|!><|<|<=|!<}表达式
|字符串表达式[与字符串表达式不同]
[转义“转义字符”]
|表达式和表达式之间的表达式[非]
|表达式为[非]NULL
|包含
({column |*},<包含搜索条件>)
|自由文本({column},'FREETEXT_string')
|表达式[不]在(子查询|表达式[,…n])
|表达式{=|<>|!=|>=|!>=|!>=|!><|<=|!<}
{ALL | SOME | ANY}(子查询)
|存在(子查询)}

列在两部分的方括号中,这意味着它是可选的

如果我们扩大这一范围:

< search_condition > ::= 
    { [ NOT ] <predicate> | ( <search_condition> ) } 
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ] 
[ ,...n ] 
:=
{[不]|()}
[{和|或}[不]{|()}]
[,…n]
,去掉一些方括号和可能的内容,我们得到:

< some_search_condition > ::= { NOT ( <search_condition> ) }
::={NOT()}
您的字符串与之匹配。

[](括号)可选语法项。不要键入括号

该语法链接位于具有定义的页面上

Transact-SQL语法约定

您认为它不支持not是什么意思?
发布失败的查询

这车开得很好

 select nativeMD5
   from docSVsys 
   join docSVtext 
     on docSVtext.fieldID = 110 
    and docSVtext.sID = docSVsys.sID
  where not (docSVsys.sID = 10 or docSVsys.sID = 11) 

我不是说它失败了。我是说我不懂铁路图。改进建议?@Blam:Christopher问的是如何阅读语法图,而不是如何编写查询。但第一部分不是可选的:搜索条件总是会产生以下两种结果:
[非]
()
然后它将在第二个可选部分中添加内容,其中生产
不是()
非常简单……你能为我详细说明一下如何删除括号吗?@Christopherfohl:在语法中,你可以删除方括号及其内容,也可以不删除其内容,这意味着你可以保留或删除可选部分。现在,我先删除了
NOT
周围的括号,然后删除了第二对括号及其所有内容。@ChristopheropherPfohl:alternation symbol适用于它左右的变量。如果语法是描述
[非]
()
,前者必须组成一个组:
{[非]谓词}|()}
必须阅读50*才能得到它。我现在感觉很傻。非常感谢。