我有一个应用程序,它使用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子句和非洲括号。
有人可以为这个设计或更好的设计提出更好的查询模式吗?
答案 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
。
在所有这些表中搜索的单个干净查询
举例说明所需的输出。