SQL如何比较null = null

时间:2016-10-17 18:54:34

标签: sql

您好我有以下两个表:

DEP表:

Deptarment_id       Dep_name
--------------------
1   Marketing
2   IT
3   Accouting
4   QA
null    Contract
5   BI

EMP表:

Deptarment_id       Dep_name
--------------------
1   Marketing
2   IT
3   Accounting
4   QA
null    Contract
5   BI

如果我运行以下查询,

SELECT * FROM CUS left join EMP on Deptarment_id = CUSTOMER_ID;

我会得到

CUSTOMER_ID NAME    Deptarment_id   Dep_name
1   JOE 1   Marketing
3   Chris   3   Accounting
5   John    5   BI
null    Steve   null    null
null    Mary    null    null
99  test    null    null

但我正在寻找的是类似的东西。我无法获得“合同”价值。

CUSTOMER_ID NAME    Deptarment_id   Dep_name
1           JOE     1               Marketing
3           Chris   3               Accounting
5           John    5               BI
null        Steve   null            Contract
null        Mary    null            Contract
99          test    null            null

1 个答案:

答案 0 :(得分:0)

你想要做什么"误用" SQL中的NULL值。 NULL不是特定值;从语义上来说,这意味着该值是未知的(不会丢失,但未知)。因此,平等没有意义。

理论很好,但有时我们希望将NULL视为合法的价值。在这种情况下,明确:

SELECT *
FROM DEP left join
     EMP
     on (DEP.Department_id = EMP.Department_id) or
        (DEP.Department_id is null AND EMP.Department_id is null);

我应该警告你,or条件下的join通常是性能杀手。有些数据库提供NULL - 安全比较,但这是特定于数据库的。如果性能有问题,还有其他方法。

如果性能问题,请询问其他问题,并提供以下内容:

  • 可行的样本数据
  • 您尝试的查询
  • 您想要的结果
  • 性能考虑因素(表格有多大)

在此问题中,示例数据与查询不匹配,因此我填写了一些详细信息。