我不确定最好的方法,即使有可能。假设我有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
答案 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
,因为它会删除重复项。
您可能需要将其他联接返回到文档表,以选取仅在一个表中的字段。