DB2 SPUFI查询

lf5gs5x2  于 2023-01-13  发布在  DB2
关注(0)|答案(1)|浏览(175)

使用DB2查询时,我需要使用多个where条件从表A中获取地址,当地址在表A中未知时,我需要使用多个where条件从表A和表B中获取临时地址。
两个表的公共字段都是Employee ID
条件应该是,

A.Emp-dept = xxx
A.Emp-state = yyy
B.Emp-code = zzz
B.Emp-proj = AAA

我尝试了以下查询

SELECT A.EMP_ID
A.EMP_ADDR,
A.EMP_DEPT,
B.EMP_CODE,
B.EMP_TEMP_ADDR
FROM TAB A
LEFT OUTER JOIN TAB B
ON A.EMP_ID = B.EMP_ID
WHERE A.Emp_dept = xxx
A.Emp_state = yyy
B.Emp_code = zzz
B.Emp_proj = AAA
ORDER BY EMP_ID

但此查询不起作用,结果为0行
预期结果
https://dbfiddle.uk/s7zr35wU

bwitn5fc

bwitn5fc1#

如果表B中可能有行,也可能没有行,那么您需要将筛选器放在ON子句中,而不是放在WHERE子句中。将它放在WHERE子句中,基本上就是将表B视为INNER JOIN而不是LEFT JOIN,因为它使用ON条件将两个表连接在一起,然后使用WHERE条件将其筛选出来。
你需要这样的东西:

SELECT A.EMP_ID
A.EMP_ADDR,
A.EMP_DEPT,
B.EMP_CODE,
B.EMP_TEMP_ADDR
FROM TAB A
LEFT OUTER JOIN TAB B
  ON A.EMP_ID = B.EMP_ID
 AND B.Emp_code = zzz
 AND B.Emp_proj = AAA
WHERE A.Emp_dept = xxx
  AND A.Emp_state = yyy
ORDER BY EMP_ID

这里假设您至少要从表A中获取一行(地址为NULL或其他),如果不是这样,您可能需要使用FULL OUTER JOIN来代替LEFT OUTER JOIN。

相关问题