用于搜刮具有无穷数目的位字段的表的SQL计划要领
在上面的搜刮查询中,我只是包括了要搜刮的属性ID的CSV字符串.现实上,您可以建设一个搜刮存储进程,在个中传入包括要搜刮的ID的CSV参数.您可以查察this answer以相识可以将CSV字符串无轮回拆分到可以插手的表中.这将导致不必要行使任何动态SQL. 编辑基于很多评述: 假如向#AttributeTypes表添加几列,则可以动态构建搜刮页面.以下是一些提议: >状态:“A”ctive“I”nactive 您可以建设全部字段复选框,或添加另一个名为#AttributesGroups的表,并将其组合在一路并行使单选按钮.譬喻,因为“Pets Allowed”和“No Pets”是独有的,因此在#AttributesGroups表“Pets”中添加一行.应用措施将在界面中对属性举办分组.组中的属性与通例的未组合属性沟通,只需网络选定的ID并将其转达给搜刮进程.可是,对付每个组,您必要让应用措施包括“无首选项”单选按钮并将其默认打开.此选项没有属性ID,由于您不想思量该属性,以是不会传入该选项. 在我的示例中,我确拭魅展示了#Apartments中的“超等属性”的示例 编辑最新评述: 这里是代码,有一个解除属性列表: ;WITH GetMatchingAttributes AS ( SELECT ApartmentID,3) --<<change dynamically or split an include CSV string and join in GROUP BY ApartmentID HAVING COUNT(AttributeID)=3--<<change dynamically or split a CSV string and use COUNT(*) from resulting include table ),SomeRemoved AS ( SELECT m.ApartmentID FROM GetMatchingAttributes m LEFT OUTER JOIN #Attributes a ON m.ApartmentID=a.ApartmentID AND a.AttributeType IN (5,6) --<<change dynamically or split an exclude CSV string and join in WHERE a.ApartmentID IS NULL ) SELECT a.* FROM #Apartments a INNER JOIN SomeRemoved m ON a.ApartmentID=m.ApartmentID WHERE a.Status='A' 我不以为我会这样做.我会凭证我之前编辑的要领举办操纵.当必要包括/解除属性时,我只为每个属性添加一个属性:“应承携带宠物”和“榨取携带宠物”. 我更新了原始帖子中的示例数据以表现此信息. 运行原始查询: >(..,..,6,..)找到应承携带宠物的公寓 我以为这是更好的要领.当与上一次编辑中描写的分组构想和动态构建的搜刮页面团结行使时,我以为这会更好而且运行得更快. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |