我想获取以下数据:如果:Code不为NULL,我想与所有4个条件匹配:代码,接触器,类型和命名法。如果:Code为NULL,我只想匹配Contractor,Type和Nomenclature。我在这里写了一些查询
SELECT "Nomenclature" as "IdNom",
"Cod" as "ContrCode",
"Contanctor"
FROM "КодНоменклатуры"
WHERE (:Code IS NOT NULL OR "Code" = ANY (:Code :: text[]))
AND ("Contactor" = :Contractor::integer
AND "Type" = :IsSupplier::integer
AND "Nomenclature" IS NOT NULL)
但是它无法正常工作。当我输入代码时,它将查询与承包商,类型和术语匹配但与代码不匹配的所有内容。如果我没有输入代码,则结果是正确的,我匹配了Contractor,Type和Nomenclature。
SELECT "Nomenclature" AS "IdNom", "Cod" AS "ContrCode", "Contanctor"
FROM "КодНоменклатуры"
WHERE (
:Code IS NOT NULL AND "Contactor" = :Contractor::integer AND "Type" = IsSupplier::integer AND "Nomenclature" IS NOT NULL
)
OR
(
"Code" = ANY (:Code :: text[]) AND "Contactor" = :Contractor::integer
)
...WHERE :Code IS NOT NULL...
将始终为TRUE,只要您将内容传递给:Code。因此,OR
之后的部分将不再进行评估,因为那时整个术语为TRUE。