您好我有以下两个表:
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
答案 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
- 安全比较,但这是特定于数据库的。如果性能有问题,还有其他方法。
如果性能问题,请询问其他问题,并提供以下内容:
在此问题中,示例数据与查询不匹配,因此我填写了一些详细信息。