繁体   English   中英

运行查询,根据第一个表中的数据从一个表和两个其他可能的表中选择一个数据

[英]running a query selecting data from one table and one of two possible other tables depending on data in the first table

目前,我正在更新一个网站,该网站可能会运行大量的查询!

简单的说,有3个表。

更新 UpdateID Files_FileID Pages_PageID UpdateDate

页面 PageID PageTitle

文件 FileID FileTitle

Updates表中的Files_FileID链接到Files表中的FileID Updates表中的Pages_PageID链接到Pages表中的PageID

目前,代码在Updates表上执行选择查询,然后循环遍历那些结果,如果Pages_PageID有一个值,则对Pages表上的每个结果运行另一个查询,如果Files_FileID有一个值,则对Files表上的每个结果。 现在,如果该站点最初在15年前完成,那么它可能还不错(如果不好的做法),但是我将要添加将在更新表中列出的将近2000个新文件!

我想更改它(如果可能)以运行一个查询。 能做到吗?

我可以看到可以将其分为两个查询,一个查询用于页面,一个查询用于文件,但是然后我将有两个基于UpdateDate的结果,并且我无法以正确的顺序显示它们。

大概是您想要获取要更新的事物的类型和标题。

您的问题的答案是正确的加入应该是一个很大的好处。 在这种情况下,可以执行以下操作:

select u.updateid, updatedate,
       (case when f.fileid is not null then 'File' else 'Page' end) as which,
       coalesce(FileTitle, PageTitle) as title
from updates u left join
     files f
     on u.files_fileid = f.fileid left join
     pages p
     on u.pages_pageid = p.pageid;

假定每个记录仅引用一页或一个文件,而不是两者。 此外,为了提高性能,您希望每个表中的主键都有索引(如果将它们定义为主键,则存在索引)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM