gpt4 book ai didi

mysql - 从一个表中选择,并根据该表中的值从一个或两个其他表中选择

转载 作者:行者123 更新时间:2023-11-29 12:22:37 24 4
gpt4 key购买 nike

我正在一个旧网站上做一些工作,该网站会带回项目列表。

目前,它执行一个查询,从一个表中选择列表项,然后循环该查询 - 并根据第一个表中的值 - 对第二个表执行查询,或对第三个和第四个表执行查询 table 。因此,包含 100 个项目的列表可能会导致运行 101 个查询!

这是基本的表格布局;

**tblLists** ListID, ListType, ListTitle, tblPages_PageID, tblFiles_FileID, LinkAddress, Description

**tblPages** PageID, PageTitle, PagePath

**tblFiles** FileID, FileName, tblFileTypes_FileTypesID

**tblFileTypes** FileTypeID, FileTypeDescription, FileTypeIcon

tblLists.ListType 可以是 4 种类型之一。可以是;

1) “Page”,在这种情况下 tblLists.tblPages_PageID 与 tblPages 表中的 PageID 相关。如果它的“Page”,它会在循环中运行一个查询,从 tblPages 中选择 PageTitle、PagePath,其中 tblPages.PageID = #tblPages_PageID#

2) "file",在这种情况下 tblLists.tblFiles_FileID 与 tblFiles 表中的 FileID 相关。如果它的"file",它会在循环中运行一个查询,选择 tblFiles.FileName、 tblFileTypes.FileTypeDescription 、 tblFileType.tblFileTypeIcon FROM tblFiles 、 tblFileTypes WHERE tblFiles.FileID = #tblFiles_FileID# 和 tblFiles.tblFileTypes_FileTypesID = tblFileTypes.FileTypeID

3) 'Link' 在这种情况下 'LinkAddress' 将有一个值。无需进一步查询。

4)“文本”,在这种情况下“描述”将具有值。无需进一步查询。

如果可能的话,我希望能够将主查询和所有后续查询合并到一个查询中。

所以类似(sql 对于 if 语句显然是不正确的 - 但这就是我想要实现的目标!),

select tblLists.ListType , tblLists.ListTitle , tblPages.PageTitle 
, tblPages.PagePath , tblFiles.FileName,tblFileTypes.FileTypeDescription
, tblFileTypes.FileTypeIcon

FROM tblLists , tblPages , tblFiles , tblFileTypes
WHERE ...

if type = 'page'
select PageTitle, PagePath
from tblPages
where tblPages.PageID = tblLists.tblPages_PageID

or if type = 'file'
select tblFiles.FileName, tblFileTypes.FileTypeDescription
, tblFileType.tblFileTypeIcon
FROM tblFiles
, tblFileTypes
WHERE tblFiles.FileID = tblLists.tblFiles_FileID
and tblFiles.tblFileTypes_FileTypesID = tblFileTypes.FileTypeID

or if type = 'link' no other work needed

or if type = 'text' no other work needed

这可能吗?!

然后我可以运行并输出一个查询,对于每条记录,如果类型为"file",我将从 tblFiles 和 tblFileTypes 表中获得所需的信息,如果类型为“页面”,我将获得我需要的信息来自 tblPages 表,如果是“链接”或“文本”,我也有这两个。

感谢您的帮助:)

更新

感谢 Dan 的启发,我已经走到了这一步;

SELECT tblLists.ListType , tblLists.ListTitle , tblLists.LinkAddress , tblLists.Description , tblFiles.FileName , tblPages.PageTitle , tblPages.PagePath

FROM tblLists

LEFT JOIN tblFiles ON tblLists.tblFiles_FileID = tblFiles.FileID
LEFT JOIN tblPages ON tblLists.tblPages_PageID = tblPages.PageID

WHERE tblLists.ListType = 'File'
AND tblLists.tblFiles_FileID = tblFiles.FileID

OR tblLists.ListType = 'Page'
AND tblLists.tblPages_PageID = tblPages.PageID

OR tblLists.ListType = 'Link'

OR tblLists.ListType = 'Text'

ORDER BY tblLists.ListTitle

我现在需要的就是将 tblFileTypes.ReferenceID = tblFiles.FileTypes_ReferenceID 放入查询中 - 我需要像左连接上的左连接吗?! ...

最佳答案

是的,这是可能的。这种结构应该对你有帮助。您必须弄清楚细节。

select yourFields 
from table1 t1 join table2 t2 on t1.something = t2.something
where someConditionsAreMet
and
(
(someMoreConditionsAreMet)
or
(someOtherConditionsAreMet)
or
(yetAnotherSetOfConditionsAreMet)
)

在您的 select 子句中,coalesce 函数可能会帮助您完成所需的任何条件逻辑。

关于mysql - 从一个表中选择,并根据该表中的值从一个或两个其他表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com