【发布时间】:2013-08-17 04:11:49
【问题描述】:
我一直在尝试订购我的表中包含的对象的 ID。为此,我使用了以下层次结构,它基于“IN”子句中的属性顺序:
订购方式
第一:匹配所有属性的 ID:'Solid' 和 'Metal' 和 'Red'
第二个:与属性匹配的 ID:'Solid' 和 'Metal'
第三个:只匹配属性的 ID:'Solid'
第四:与属性匹配的 ID:“金属”和“红色”
第五个:只匹配属性的 ID:'Metal'
第六个:只匹配属性的 ID:'Red'
我使用的主要查询是:
SELECT objectattributelink.ID, COUNT(*) Attributes
FROM objectattributelink, attributelist
WHERE objectattributelink.ID = attributelist.AttributeID
AND attributelist.AttributeDesc IN ('Solid', 'Metal', 'Red')
AND objectattributelink.AttributeID BETWEEN 1000 AND 1200
GROUP BY objectattributelink.ID
ORDER BY COUNT(*) DESC
它以简化的顺序返回所有 ID。在这种情况下,顶部的那些(匹配 3 个属性)就可以了,但其余的顺序是随机的。
我当前的解决方案是运行 6 个不同的查询,但我想知道是否可以一次性完成。
我对每个查询所做的基本上是:
一个具有:IN ('Solid', 'Metal', 'Red') 和 HAVING 属性 = 3,第二个具有:IN ('Solid', 'Metal') 和 HAVING 属性 = 2,第三个具有: IN('Solid'),第四个带有:IN('Metal','Red')和HAVING Attributes = 2,第五个带有:IN('Metal')和第六个带有IN('Red')
【问题讨论】:
标签: sql group-by sql-order-by