mySQL Left加入多个表

时间:2013-02-02 09:06:59

标签: mysql oracle left-join

我有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。

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

2 个答案:

答案 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:

enter image description here

答案 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

试试这样。它可以帮到你。