Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL工作异常_Sql - Fatal编程技术网

SQL工作异常

SQL工作异常,sql,Sql,执行此SQL代码时: select id, opis, vidrabota, tipprov, hitnost, valuta, drzava, zbirnaprov, tip_zbirprov, kanal from dev_1450autoebanktip where opis is null or Opis like case when isnull('','') = '' then Opis else '%' + '' + '%' end and VidRabota = case whe

执行此SQL代码时:

select id, opis, vidrabota, tipprov, hitnost, valuta, drzava, zbirnaprov, tip_zbirprov, kanal
from dev_1450autoebanktip
where opis is null or Opis like case when isnull('','') = '' then Opis else '%' + '' + '%' end
and VidRabota = case when isnull('','') = '' then VidRabota else '' end
and TipProv = case when isnull(0,0) = 0 then TipProv else 0 end
and Valuta = case when isnull('','') = '' then Valuta else '' end
and drzava is null or Drzava = case when isnull('','') = '' then Drzava else '' end
我得到了这组结果:

但当我再添加一个条件(最后一行)时:

结果我输了一排。是什么导致了这种变化


最后一行中的假名为空

and KANAL = case when isnull(0,0) = 0 then KANAL else 0 end
归结为

and KANAL = KANAL
但对于NULL,情况并非如此,因为NULL是未知值。将null与null进行比较时,结果既不是真的也不是假的,而是未知的。因此,添加的条件将取消最后一条记录

我想补充一点:在混合
以及
时使用括号。比如说

a = b or a = c and d = e
意味着

因为
优先于
,您可能希望表达式的意思是

(a = b or a = c) and d = e

使用括号以避免任何错误。

我不知道您的where子句,您想实现什么?这是一个Delphi代码,我从code中获取作为参数的值。如何避免这种情况,并在KANAL列中显示具有空值的行?如果我在最后一个条件中添加的KANAL为NULL或part,那么我永远不会有机会在列kanalus中仅显示值为1的行。通常,您将动态构建查询,并且仅在需要KANAL限制时添加条件。但是,当您希望有一个适用于任何所需条件组合的静态查询时,可以使用:
和(isnull(@kanal,0)=0或kanal=@kanal)
。检查:未给出限制或满足限制。您应该相应地重新编写所有标准。我目前在Delphi中的代码如下所示:选择id、opis、vidrabota、tipprov、hitnost、valuta、drzava、zbirnaprov、Tipzbirprov、,dev_1450; autoebanktip中的假名,其中Opis与case相似时:Opis='',然后是Opis else“%”+:Opis+'%”end和VidRabota=case当:VidRabota=''然后是VidRabota else:VidRabota end。。。但是我从来没有得到过包含空值的记录,这就是为什么我必须插入第一部分来得到这些行,但是现在我总是在结果集中得到它们。在Delphi中:KANAL是参数,所以它只是:而不是@I,我现在要试试你的方法
a = b or (a = c and d = e)
(a = b or a = c) and d = e