我有3个表使用外键链接在一起。其中一个表包含可能为null的数据,但我仍然希望它显示。我也有多种工作条件。
这是我到目前为止所做的,但它不起作用:
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。
编辑:运行上述查询时没有错误。只是因为我缺少具有空字段的结果。
答案 0 :(得分:4)
请求使用JOINS
,准确地说就是LEFT 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'
;
参考:
Visual Representation of JOINs:
答案 1 :(得分: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这支持在条款之间。例如: - 从date = 2013-01-01 迄今为止= 2013-01-31
试试这样。它可以帮到你。