2014-04-22 76 views
-1

我們有三個表,document,departmentcontact在SQL中連接三個表,內部連接不能正常工作

所有表都通過'id'列鏈接。我想要的結果如下

 firstname lastname address upload_date department_name 

下面的查詢取前四列

SELECT contact.firstname, contact.lastname,contact.address , 
    document.upload_date 
    FROM contact 
    JOIN document 
    ON document.id= contact.id 
    AND contact.status = 1 
    AND document.defaultdoc=1 

所以這是一個內部聯接。

但是爲了獲取最後一列,department_name我添加了一個類似的連接contact.deptId=department.id,但查詢返回零結果。哪裏不對了 ?

+0

沒有實際的表格結構,我們可以猜測。它可能是你使用錯誤的ID(文檔中的主鍵而不是外鍵) – StanislavL

+2

你正在將'document 1'加入'contact 1',這不太可能是正確的。 'document'表有'contact_id'字段嗎?還是有一個鏈接表與'contact_id'和'document_id'?您可能需要將這三個表格中的每一個的所有字段名稱都提供給我們。或者詢問您的組織中哪些人瞭解您應該使用哪些字段。 – MatBailie

回答

0

如果添加

JOIN department 
ON contact.deptId=department.id 

它應該工作。

0

如果在其主表部門存在的所有DEPTID那麼你可以使用下面的查詢:

SELECT c.firstname, c.lastname,c.address , 
    doc.upload_date, d.department_name 
    FROM contact as c 
    JOIN document as doc 
    ON doc.id= c.id 
    AND c.status = 1 
    AND doc.defaultdoc=1 
    JOIN department as d 
    on c.deptId=d.id; 

但如果DEPTID更新接觸表部門表不存在(如果你想引用完整性不應該是在你的分貝),那麼你可以使用下面的查詢:

SELECT c.firstname, c.lastname,c.address , 
    doc.upload_date, d.department_name 
    FROM contact as c 
    JOIN document as doc 
    ON doc.id= c.id 
    AND c.status = 1 
    AND doc.defaultdoc=1 
    LEFT JOIN department as d 
    on c.deptId=d.id; 

如果兩者都不起作用,然後顯示您的表數據和結構。