Mysql 从一个或三个表中选择的SQL查询

Mysql 从一个或三个表中选择的SQL查询,mysql,sql,database,join,database-schema,Mysql,Sql,Database,Join,Database Schema,我正在构建一个文档管理器,其中一个文件可以属于多个文件夹(当从前端执行复制操作时),一个文件夹也可以属于多个文件,同样要记住,一个文件和文件夹可以属于另一个文件夹。在这种设计中,我选择了多对多关系,因为这很有意义。我有三个表文件夹,文件,文件文件夹,其中文件文件夹是透视表 我的简单数据库模式定义如下: 文件: 文件| id |名称 1 | document.docx 文件夹: 文件夹| id |名称 1 |根 2 |图像 文件\u文件夹: 文件id |文件夹id |相位 空| 2 | 1

我正在构建一个文档管理器,其中一个文件可以属于多个文件夹(当从前端执行复制操作时),一个文件夹也可以属于多个文件,同样要记住,一个文件和文件夹可以属于另一个文件夹。在这种设计中,我选择了多对多关系,因为这很有意义。我有三个表文件夹,文件,文件文件夹,其中文件文件夹是透视表

我的简单数据库模式定义如下:

文件:

文件| id |名称
1 | document.docx

文件夹:

文件夹| id |名称
1 |根
2 |图像

文件\u文件夹:

文件id |文件夹id |相位
空| 2 | 1
1 |空| 1

现在的问题是,我一直在尝试编写一个连接查询,如果文件和文件夹共享同一个文件夹,则返回它们的列表。下面是我尝试过的查询列表,但没有一个查询能够返回所需的结果

我非常希望我的结果是这样的:


文件|文件夹| id |名称
1 | NULL | document.docx
空| 2 |图像

从中选择*
文件夹目录
连接文件\u文件夹目录\u文件
ON dir_file.dir_id=dir.dir_id
连接文件文件
ON dir\u file.file\u id=file.file\u id
其中dir_file.dir_id=1 ORDER BY dir_file.created_at

从中选择*
文件夹目录,文件目录
连接文件\u文件夹目录\u文件
ON(dir_file.file_id=file.file_id或dir_file.dir_id=dir.dir_id)
其中dir_file.dir_id=1 ORDER BY dir_file.created_at

我知道我只是错过了一些我还不知道的事情。或者可能我只是把DB模式完全弄错了。我真的不想将文件和文件夹放在同一个表上,并引用phash(父文件夹),这将起作用,但将包含文件的文件夹复制到另一个文件夹只会复制文件夹,而不会复制其中的文件,因为我必须复制所有子文件夹和文件才能实现这一点,这非常糟糕。如果我能找到解决办法,我将不胜感激

编辑:

下面的工作很好,我现在

从文件夹目录中选择*
左连接文件\u文件夹目录\u文件
ON dir_file.dir_id=dir.dir_id
左连接文件
ON dir\u file.file\u id=file.file\u id

其中dir_file.phash=1 ORDER BY dir_file.created_于

创建,原因是您应该使用左联接的表之间并不总是匹配

  SELECT * 
  FROM folders dir
  LEFT JOIN file_folder dir_file ON dir_file.dir_id = dir.dir_id and dir_file.phash = 1
  LEFT JOIN files file ON dir_file.file_id = file.file_id
  ORDER BY dir_file.created_at

在左连接中,移动On子句中的where条件(否则作为内部连接使用)

非常感谢,您的回答实际上为我指明了正确的方向。请看我上面的问题,以获得正确的版本。@谢谢。。用phash回答更新。。状况良好