首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检索搜索结果的SQL查询

问用于检索搜索结果的SQL查询
EN

Stack Overflow用户
提问于 2009-05-29 10:07:32
回答 3查看 514关注 0票数 0

我需要帮助设计一个查询,将用于返回网站的搜索结果。用户通过从属性列表中选择项目进行搜索。返回的每个搜索结果项必须具有用户选择的所有属性。

挑战(至少对我来说是这样!)就是弄清楚如何只返回具有所有属性的结果,而不是只返回其中任何属性。

搜索结果项(让我们称它们为小部件)在小部件表中。可能的小部件属性在属性表中。连接表(WIDGETATTRIBUTEJUNCTION)存储每个小部件的0,1..n实际属性。

当提供一个小部件属性列表时,我想不出一个查询会返回具有所有这些属性的行。我怀疑我可能会使用ALL子查询和/或INTERSECT,但不确定如何使用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-29 10:18:19

您可以使用类似于以下内容的内容,

代码语言:javascript
复制
SELECT WidgetID FROM Widget INNER JOIN WidgetAttributes WA ON WA.Key = SearchAttributes.Key AND WA.WidgetID = Widget.WidgetID GROUP BY WidgetID HAVING COUNT(Widget.WidgetID) > @SearchAttributesCount

关键字是GROUP BY HAVING语句,该语句将其限制为仅包括与所有属性匹配的所有Widget行。

票数 1
EN

Stack Overflow用户

发布于 2009-05-29 10:31:10

如果只有SQL支持的阵列...

有几种方法可以做到这一点,我更喜欢的方法是向SQL发送一个字符串(包含属性is ),然后将该字符串拆分到一个表中。

类似于:

代码语言:javascript
复制
create function dbo.fn_makeArray ( @value nvarchar(max) )
    returns @table table([key] nvarchar(256))
    begin
        declare @start int;
        declare @end int;

        select @start = 1, @end = charindex(',', @value);

        while (@start < len(@value) + 1)
        begin
            if (@end = 0)
                set @end = len(@value) + 1;

            insert into @table ([key]) 
            values(substring(@value, @start, @end - @start));

            set @start = @end + 1;
            set @end = charindex(',', @value, @start);
        end
        return;
    end
票数 0
EN

Stack Overflow用户

发布于 2009-05-29 10:36:19

前段时间我们遇到了这样的问题:

代码语言:javascript
复制
select WidgetName,AttributeName 
 from Widgets
 left join WALinks    on WALinks.wid = WidgetID
 left join Attributes on WALinks.aid = AttributeID

where WidgetID in 
 (
  select wId 
  from waLinks 
  where aid in (1,3) 
  group by wId 
  having count(aId) = 2
 ) 

然后,您可以将属性设置为列表"in (1,3)“,并始终将计数查询的数量调整为要匹配的属性数量。

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

https://stackoverflow.com/questions/925296

复制
相关文章

相似问题

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