查询具有零对多关系的表

时间:2018-04-21 04:07:17

标签: mysql database-design many-to-many

我有一个应用程序,它使用MySQL数据库来存储,询问其他事情,会议和项目。项目可以有零到多个会议,会议可以有零到多个项目。为了帮助将会议链接到项目,我正在尝试编写一个简单的查询来搜索所有这些表及其关系(例如,项目有任务,会议有与会者)

以下是设计概念:

项目 - ID - 参考 - 描述 - 输入

project_meetings - ID - project_id - meeting_id - created_at - created_by

会议 - ID - 参考

meeting_attendee - ID - meeting_id - person_id

人 - ID - 姓名

project_tasks - ID - project_id - task_type_id - 内容

task_types - ID - task_title

我最简单的想法是使用LEFT JOIN,但是我发现它会从具有零相关对象的表中删除结果。有两种方法可以使用UNION,子查询或非常可怕的WHERE-AND-OR子句和非洲括号。

有人可以为这个设计或更好的设计提出更好的查询模式吗?

1 个答案:

答案 0 :(得分:0)

  

项目可以举行零对多会议

- >

CREATE TABLE Projects (
    id ...

CREATE TABLE Meetings (
    id ...
    project_id ... -- this is all you need for 0:many (or 1:many)

你的sqlfiddle显示了一个多对多的"产品和会议之间的关系,而不是"零到多"。因此,效率低下。见http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

当两个表JOINing时,您可能需要使用LEFT JOIN

  

在所有这些表中搜索的单个干净查询

举例说明所需的输出。