带有串联AND语句的SQL查询
我需要一个条件的反面:带有串联AND语句的SQL查询,sql,sql-server,Sql,Sql Server,我需要一个条件的反面: SELECT TAX.* FROM TAX JOIN STATUS ON TAX.TAX_ID = STATUS.TAX_ID WHERE STATUS.VALUE = 'ACTIVE' OR (STATUS.VALUE = 'COLLECTED' AND STATUS.COLLECTEDDATE >= '20000101') 我想要的是不符合where子句的记录 我试过了 SELECT TAX.* FROM TAX JOIN STATUS on TAX
SELECT TAX.*
FROM TAX
JOIN STATUS ON TAX.TAX_ID = STATUS.TAX_ID
WHERE STATUS.VALUE = 'ACTIVE'
OR (STATUS.VALUE = 'COLLECTED' AND STATUS.COLLECTEDDATE >= '20000101')
我想要的是不符合where子句的记录
我试过了
SELECT TAX.*
FROM TAX
JOIN STATUS on TAX.TAX_ID = STATUS.TAX_ID
WHERE STATUS.VALUE != 'ACTIVE'
AND (STATUS.VALUE != 'COLLECTED' and STATUS.COLLECTEDDATE < '20000101')
选择税务。*
税款
加入TAX.TAX\u ID上的状态=STATUS.TAX\u ID
其中STATUS.VALUE!='主动的
和(STATUS.VALUE!='COLLECTED'和STATUS.COLLECTEDDATE<'20000101')
但我好像丢失了记录。我认为SQL Server会删除记录,我怀疑它会删除括号
我能得到一个关于如何进行的建议吗
谢谢两种方式
Select TAX.* from TAX
JOIN STATUS on TAX.TAX_ID = STATUS.TAX_ID
WHERE NOT
(STATUS.VALUE = 'ACTIVE'
OR (STATUS.VALUE = 'COLLECTED' and STATUS.COLLECTEDDATE >= '20000101'))
Select TAX.* from TAX
JOIN STATUS on TAX.TAX_ID = STATUS.TAX_ID
WHERE STATUS.VALUE != 'ACTIVE'
AND (STATUS.VALUE != 'COLLECTED' or STATUS.COLLECTEDDATE < '20000101')
Select TAX.* from TAX
JOIN STATUS on TAX.TAX_ID = STATUS.TAX_ID
WHERE NOT
(STATUS.VALUE = 'ACTIVE'
OR (STATUS.VALUE = 'COLLECTED' and STATUS.COLLECTEDDATE >= '20000101'))
Select TAX.* from TAX
JOIN STATUS on TAX.TAX_ID = STATUS.TAX_ID
WHERE STATUS.VALUE != 'ACTIVE'
AND (STATUS.VALUE != 'COLLECTED' or STATUS.COLLECTEDDATE < '20000101')
从TAX中选择TAX.*
加入TAX.TAX\u ID上的状态=STATUS.TAX\u ID
其中STATUS.VALUE!='主动的
和(STATUS.VALUE!='COLLECTED'或STATUS.COLLECTEDDATE<'20000101')
将和
更改回或
。所以<代码>WHERE STATUS.VALUE!='ACTIVE'或(STATUS.VALUE!='COLLECTED'和STATUS.COLLECTEDDATE<'20000101')如果您想精确地反转子句,为什么不将其包装在not(…)
中,而不是自己费力地反转所有运算符?速度首选的运算符之一?@arcee123作为not()的第二个运算符将处理()@DhruvJoshi:我真诚地怀疑这是正确的,当有疑问时,答案通常是“试试看”。优化器可以自由重写任何一个查询,由于否定的条件,这两个查询都不能有效地使用索引,因此,如果确实存在差异,我会感到惊讶。@Jeroenmoster我同意!这取决于索引和计划中展开的内容