用于复杂逻辑的SQL查询(pl/SQL)
这个问题困扰了我一段时间。首先,我将解释表的结构 我的系统中有四个表 域 网页 插件类型(可添加到网页的插件类型) 此表列出了每个域可用的插件类型 插件:域中的每个网页都可以使用任意数量的插件 现在我想要的是,给定一个域ID,我想要所有可用网页插件的列表,这样插件就不会在多个网页中重复。 换句话说,每个插件的网页插件组合,这样插件就不会在多个网页中重复 所以对于域名1000(google.com) 我想要的结果是 我只选择了5002和5003个网页,因为它们包含了域名1000(google.com)的所有插件。用于复杂逻辑的SQL查询(pl/SQL),sql,mysql,sql-server,oracle,plsql,Sql,Mysql,Sql Server,Oracle,Plsql,这个问题困扰了我一段时间。首先,我将解释表的结构 我的系统中有四个表 域 网页 插件类型(可添加到网页的插件类型) 此表列出了每个域可用的插件类型 插件:域中的每个网页都可以使用任意数量的插件 现在我想要的是,给定一个域ID,我想要所有可用网页插件的列表,这样插件就不会在多个网页中重复。 换句话说,每个插件的网页插件组合,这样插件就不会在多个网页中重复 所以对于域名1000(google.com) 我想要的结果是 我只选择了5002和5003个网页,因为它们包含了域名1000(google.co
还有一件事,最好选择一个只有一个插件的网页。但是我对找到没有这个偏好的解决方案感兴趣,以后也许我可以改进这个解决方案。你可以从另一个角度来看,因为你要返回每个插件类型的一行,你需要一个域上的所有插件类型,以及一个插件类型插入的示例页面,大致如下:
SELECT PluginTypeId,
(
SELECT webpageID
FROM plugin pi
WHERE pi.pluginTypeId = pd.pluginTypeId
AND webPageID IN
(
SELECT WebPageID
FROM WebPage
WHERE DomainId = 1000
)
ORDER BY
(
SELECT COUNT(*)
FROM plugin pc
WHERE pc.webpageId = pi.webpageId
)
LIMIT 1
) AS WebPageId
FROM Plugin pd
WHERE WebPageId IS NOT NULL
Select PluginTypeName,
(select top 1 WebpageName
from WebPage w
inner join Plugin p on p.WebpageID = w.WebpageID
where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage
From PluginTypes pt
这将返回如下结果:
searchButton SearchPage.html
DropDownMenu SearchPage.html
InteractiveForm null
loginForm ContactUs.html
lotoutform Welcome.html
以上结果(斯维科提交)应该有效,我正在尝试,可能会给出重复的结果。此外,它还按域对结果进行分组。。。下面是一个修改:
Select DISTINCT DomainID, pt.PluginTypeName,
(select top 1 WebpageName
from WebPage w
inner join Plugin p on p.WebpageID = w.WebpageID
where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage
From PluginTypes pt
GROUP BY DomainID, pt.PluginTypeName
您正在寻找“DISTINCT”命令吗?具体针对哪个数据库?语法不是100%相同
5002 (Welcome.html) 8000 (SearchButton)
5002 (Welcome.html) 8001 (DropDownMenu)
5002 (Welcome.html) 8004 (lotoutform)
5003 (ContactUs.htm) 8003 (loginForm)
SELECT PluginTypeId,
(
SELECT webpageID
FROM plugin pi
WHERE pi.pluginTypeId = pd.pluginTypeId
AND webPageID IN
(
SELECT WebPageID
FROM WebPage
WHERE DomainId = 1000
)
ORDER BY
(
SELECT COUNT(*)
FROM plugin pc
WHERE pc.webpageId = pi.webpageId
)
LIMIT 1
) AS WebPageId
FROM Plugin pd
WHERE WebPageId IS NOT NULL
Select PluginTypeName,
(select top 1 WebpageName
from WebPage w
inner join Plugin p on p.WebpageID = w.WebpageID
where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage
From PluginTypes pt
searchButton SearchPage.html
DropDownMenu SearchPage.html
InteractiveForm null
loginForm ContactUs.html
lotoutform Welcome.html
Select DISTINCT DomainID, pt.PluginTypeName,
(select top 1 WebpageName
from WebPage w
inner join Plugin p on p.WebpageID = w.WebpageID
where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage
From PluginTypes pt
GROUP BY DomainID, pt.PluginTypeName