2013-02-02 156 views
2

我有3个表使用外键链接在一起。其中一个表包含的数据可能为空,但我仍然希望显示它。我也得到了多个条件中工作mySQL左加入多个表

这是我迄今为止,但它不工作:

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

如果在执行查询时出现错误,请在此提及错误。 –

+0

如果您使用的是Oracle,请更正标签。 –

回答

4

Pleaes使用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

+0

工作!非常感谢! – Cyrallia

+0

@Cyrallia glat你有它的工作':D'前进请看看'JOIN'如何使你的查询高效和干净。 – bonCodigo

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在此支持条款之间。例如: - 从日期= 2013-01-01 迄今= 2013-01-31

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