我一直在尝试订购我的表中包含的对象的 ID。为此,我使用了以下层次结构,它基于“IN”子句中的属性顺序:
订购方式
第一:匹配所有属性的 ID:“Solid”、“Metal”和“Red”
第二:与属性匹配的 ID:'Solid' 和 'Metal'
第三:只匹配属性的 ID:'Solid'
第四:匹配属性的ID:“金属”和“红色”
第五:仅匹配属性的 ID:“金属”
第六:只匹配属性的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')