2

我有 3 个表使用外键链接在一起。其中一张表包含可能为空的数据,但我仍然希望它显示。我也有多种条件。

这是我到目前为止所拥有的,但它不起作用:

SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, em.EmpNo, em.EmpFirstName, em.EmpLastName
FROM OrderTbl ord, Customer cu, Employee em
WHERE cu.CustNo=ord.CustNo
AND em.EmpNo=ord.EmpNo (+)
AND ( OrdDate BETWEEN '01-Jan-04'
AND '31-Jan-04')
AND cu.CustState = 'CO'

基本上,订单表上的员工信息可能为空,但我仍然希望显示条目。任何帮助将不胜感激,因为我才开始学习 SQL。

编辑:运行上述查询没有错误。只是我缺少具有空字段的结果。

4

2 回答 2

4

请使用JOINSLEFT JOIN 来显示所有员工的订单:

SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, 
em.EmpNo, em.EmpFirstName, em.EmpLastName
FROM OrderTbl ord
  LEFT JOIN 
  Customer cu
    ON  cu.CustNo=ord.CustNo
    AND cu.CustState = 'CO'
  LEFT JOIN 
  Employee em
    ON  em.EmpNo=ord.EmpNo
WHERE OrdDate BETWEEN '2004-01-01' 
                  AND '2004-01-31'
;

参考:

JOIN 的可视化表示:

在此处输入图像描述

于 2013-02-02T09:11:01.073 回答
0
SELECT ord.OrdNo, ord.OrdDate, cu.CustNo, cu.CustFirstName, cu.CustLastName, em.EmpNo, em.EmpFirstName, em.EmpLastName FROM OrderTbl ord, Customer cu, Employee em WHERE cu.CustNo=ord.CustNo AND em.EmpNo=ord.EmpNo AND ( ord.OrdDate BETWEEN 'YYYY-mm-dd' AND 'YYYY-mm-dd') AND cu.CustState = 'CO'

YYYY-mm-dd 这在 between 子句中支持。例如:- 从日期 = 2013-01-01 到日期 = 2013-01-31

试试这样。可能会帮助你。

于 2013-02-02T09:14:38.210 回答