繁体   English   中英

如何比较不同表中的 2 列

[英]How to compare 2 columns from different table

我试图有一个条款,将表 A 中的列与表 B 中的列进行比较,但结果没有带来任何结果。 难道我做错了什么?

我的查询>

SELECT EMP, COD, VEV, SEQ, TIP, NUM, EMI, VEN, DTR, GRU, PRO, QTD, PVE, TOT, FAT, COM, COO, REF, VAR, hcli.NOM as "VENDEDOR", hemp.enc
 FROM hcov 
    INNER JOIN hcli ON hcov.COD = hcli.COD
    INNER JOIN hemp ON hemp.cod = hcov.emp 
WHERE (hcli.NOM NOT LIKE '%COOPERATIVA%')
AND (DTR >= date '2020-01-01')
AND (COD <> 24545 OR COD <> 10368 OR COD <> 13149 OR COD <> 10448 OR COD <> 11041 OR COD <> 30610 OR COD <> 6834)
AND (GRU <> 266 OR GRU <> 269 OR GRU <> 272)
AND ( (VEV <> 37125) AND (COO <> 987209 OR COO <> 23631 OR COO <> 927500 OR COO <> 22763 OR COO <> 38736 ) )
AND (hemp.enc <> hcov.cod) 

AND (hemp.enc <> hcov.cod) -> 显然这条线没有正常工作

结果完全是空白,但两列都不同..所以它应该带来

在此处输入图像描述

问题是因为您正在比较(至少其中一个)为 NULL 的值。

NULL 不被视为一个值 - 它被视为“未知”。 可能是您要检查的值,也可能不是。 因此,检查是否有任何内容= NULL会导致 NULL 答案 - 答案也是未知的。

请注意,即使检查NULL = NULL返回 NULL。 可能第一个值为 1,第二个值为 1,因此为真,或者第二个值为 2。因此为假,因此检查NULL = NULL导致 Z6C4E226B4D4795D518AB341B0824EC29Z

可以检查某些东西是否为 NULL - 这本质上是在询问“值是否未知”。 例如,

  • 如果@a 是 NULL
  • 然后检查IF @a = NULL结果为 NULL
  • 同时检查IF @a IS NULL结果为真

换句话说,如果hemp.enc是 NULL 和/或hcov.cod是 NULL,您需要弄清楚您希望该过程如何工作。

例如,您可以将 WHERE 子句中的行更改为

AND ((hemp.enc <> hcov.cod) 
     OR (hemp.enc IS NULL AND hcov.cod IS NOT NULL)
     OR (hemp.enc IS NOT NULL AND hcov.cod IS NULL)
    )

这是一个db<>fiddle ,其中包含一些检查与 NULL 的结果示例。 请注意,只有显式IS NULLIS NOT NULL实际返回结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM