我需要你帮我构建一条SQL语句,我想不通。
在数据库中,我有四个表-文件、文件夹、folders_files和链接。
我有很多文件。其中一个叫做"myFile.txt“。
我有很多文件夹。"myFile.txt“就在其中的一些地方。它出现的第一个文件夹是"firstFolder“。
我有很多指向许多文件夹的链接。指向"firstFolder“的第一个链接称为"firstLink”。
该示例的数据结构为:
// files
Id: 10
Name: "myFile.txt"
// folders
Id: 20
Name: "firstFolder"
// folder_files (join table)
Id: 30
Folder_Id: 20 (meaning "firstFolder")
File_Id: 1 (meaning "myFile.txt")
// links
Id: 40
Name: "firstLink"
Folder_Id: 20 (meaning "firstFolder")第一个问题:如何获取"myFile.txt“的记录以及"firstLink”(第一个链接)的名称和Id,根据文件夹和链接的最低Id查询文件Id = 10?
第二个问题:如何获取"myFile.txt“的记录以及"firstLink”(第一个链接)的名称和Id,根据文件夹和链接的最低Id查询所有文件?
换句话说--我如何获得第一个包含"myFile.txt“的文件夹的链接?
生成如下所示的记录:
Id: 10
Name: "myFile.txt"
LinkId: 40
LinkName: "firstLink"谢谢!
发布于 2010-07-15 09:18:59
您应该尝试考虑您希望结果集看起来是什么样子。SQL是用来描述结果集的。如果您可以写出一个假设的结果集,那么编写呈现该结果集的SQL可能会更容易。
我很难理解你在寻找什么,但我相信这是一个相当直接的问题。如果你能更清楚地描述你的结果,我就能更容易地帮助你,尽管你可能不再需要我的帮助了!
例如(使用您的原始模式) Q1 & Q2:
files.Id, files.Name, links.Id, links.Name (4列)
Q1:
SELECT
files.Id, files.Name, links.Id, links.Name
FROM
files, links
INNER JOIN
folder_files
ON files.Id = folder_files.File_Id
INNER JOIN
links
ON links.Id = folder_files.Folder_Id
WHERE
files.Id = 10
ORDER BY
folder_files.File_Id ASC, links.Id ASC
LIMIT 1;(不需要具有文件夹表格的__JOIN)
Q2:
将两个ASC都更改为DESC
发布于 2010-07-15 09:01:12
这将选择文件id为10的所有链接:
select links.id, links.name
from files
left join folder_files on files.id = folder_files.file_id
left join folders on folder_files.folder_id = folders.id
left join links on links.folder_id = folders.id
where files.id=10;更改where子句,添加限制或其他您想要的东西。修改这个应该很简单。
发布于 2010-07-15 09:41:45
我会试试这个:
select f.*
, l.Id as LinkId
, l.Name as LinkName,
from Link l
inner join Folder_Files ff on ff.Folder_Id = l.Folder_Id
inner join Files f on f.Id = ff.File_Id
where f.Id = 10结果是:
Id | Name | LinkId | LinkName
10 | myFile.txt | 40 | firstLink这是你想要的吗?
https://stackoverflow.com/questions/3251708
复制相似问题