首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >join中的sql join?

join中的sql join?
EN

Stack Overflow用户
提问于 2010-07-15 08:51:29
回答 4查看 11.9K关注 0票数 2

我需要你帮我构建一条SQL语句,我想不通。

在数据库中,我有四个表-文件、文件夹、folders_files和链接。

我有很多文件。其中一个叫做"myFile.txt“。

我有很多文件夹。"myFile.txt“就在其中的一些地方。它出现的第一个文件夹是"firstFolder“。

我有很多指向许多文件夹的链接。指向"firstFolder“的第一个链接称为"firstLink”。

该示例的数据结构为:

代码语言:javascript
运行
复制
// 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“的文件夹的链接?

生成如下所示的记录:

代码语言:javascript
运行
复制
Id: 10
Name: "myFile.txt"
LinkId: 40
LinkName: "firstLink"

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-15 09:18:59

您应该尝试考虑您希望结果集看起来是什么样子。SQL是用来描述结果集的。如果您可以写出一个假设的结果集,那么编写呈现该结果集的SQL可能会更容易。

我很难理解你在寻找什么,但我相信这是一个相当直接的问题。如果你能更清楚地描述你的结果,我就能更容易地帮助你,尽管你可能不再需要我的帮助了!

例如(使用您的原始模式) Q1 & Q2:

files.Id, files.Name, links.Id, links.Name (4列)

Q1:

代码语言:javascript
运行
复制
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

票数 3
EN

Stack Overflow用户

发布于 2010-07-15 09:01:12

这将选择文件id为10的所有链接:

代码语言:javascript
运行
复制
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子句,添加限制或其他您想要的东西。修改这个应该很简单。

票数 1
EN

Stack Overflow用户

发布于 2010-07-15 09:41:45

我会试试这个:

代码语言:javascript
运行
复制
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

结果是:

代码语言:javascript
运行
复制
 Id | Name       | LinkId | LinkName
 10 | myFile.txt | 40     | firstLink

这是你想要的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3251708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档