mySQL全外连接与内连接?

时间:2013-06-14 15:52:35

标签: php mysql

我不确定最好的方法,即使有可能。假设我有4个表,类别,文档,other_documents,more_documents只有文档有一个类别,其他文件没有。我正在使用MySQL和PHP。我理解完全外连接不是mysql中的一个选项,必须使用左右连接来解决。

我可以获取所有文件和内部加入id的匹配的类别,太棒了!

现在我有上面的数据集我还希望other_documents和more_documents'添加'到上面结果集的底部,并填充类别不排列的位置。

在more_documents表中,有一个文件和other_documents表没有的唯一列。例如,phil和dave将数据提交到documents和other_documents表中,jon只将数据提交到more_documents表中,结果如下:

Id - 标题 - 发布商 - 类别 - 唯一的more_documents列

1 - doc1 - dave - global - null

2 - doc2 - phil - hr - null

3 - doc3 - dave - operations - null

4 - doc4 - dave - global - null

5 - doc5 - jon - global - 12345

6 - doc6 - jon - hr - 12345

1 个答案:

答案 0 :(得分:1)

您希望使用“driver”子查询构建查询:

select driver.Id, driver.Title, driver.publisher, c.category
from ((select id, categoryId, Title, publisher
       from documents
      ) union
      (select id, NULL, Title, publisher
       from more_documents
      ) union
      (select id, NULL, Title, publisher
       from other_documents
      )
     ) driver left outer join
     category c
     on driver.category_id = c.categoryId

请注意,union子查询中使用了driver,因为它会删除重复项。

您可能需要将其他联接返回到文档表,以选取仅在一个表中的字段。