在SQL中连接三个表,内部联接无法正常工作

时间:2014-04-22 10:28:05

标签: mysql sql join

我们有三个表格,documentdepartmentcontact

所有表都通过'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类似的联接,但查询返回零结果。怎么了?

2 个答案:

答案 0 :(得分:0)

如果你添加

JOIN department 
ON contact.deptId=department.id

它应该有用。

答案 1 :(得分: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;

如果两者都不起作用,则显示您的表数据和结构。