SQL语句 - 按另一个表排序

时间:2012-09-28 15:29:48

标签: sql database ms-access asp-classic

我正在尝试构建一个SQL语句,该语句从表中提取记录,但是按另一个表对它们进行排序。 主要 - 是我的主要产品表 MainCategory - 是产品分类

每个产品可以分为多个类别 - 因此在Main中我有一个名为CategoryIds的字段,其中包含产品所属的所有类别的ID。 (我现在知道这是错误的做法)

表格布局:

enter image description here

所以基本上当我点击一个类别时,例如品牌我希望能够按照我想要的顺序对每个类别中的产品进行排序 - 这就是为什么我创建了表CatSort的原因 我可以使用ProductId将CategoryId放在那里,DisOrder就是它们的显示方式。

所以在我的页面上有SQL语句:

Select * 
From Main  
Where CategoryIds = '11' OR 
      CategoryIds LIKE '11,%' OR 
      CategoryIds LIKE '%, 11,%' OR 
      CategoryIds LIKE '%, 11'

提取“品牌”类别中的所有产品,但如何扩展该SQL语句以按CatSort对其进行排序,同时请注意,该类别中的所有记录都不会出现在CatSort中 (或者如果它们更好的话会更好吗?当他们实际按照他们喜欢的顺序对它们进行排序时,它们才会被添加到CatSort。但是如果将新产品添加到该类别,它不会自动添加到CatSort。)

2 个答案:

答案 0 :(得分:0)

根本问题在于查询Main时,由于Main中的记录可以有多个类别,因此排序顺序可能有多个值。

以下查询将起作用:

Select * 
From Main
     Left outer join CatSort on CatSort.ProdId = Main.Id
Where CategoryIds = '11' OR 
      CategoryIds LIKE '11,%' OR 
      CategoryIds LIKE '%, 11,%' OR 
      CategoryIds LIKE '%, 11'

它会按照要求执行操作,但是如果有多个排序顺序,则主记录将出现在每个排序顺序位置。

答案 1 :(得分:0)

通过按建议

规范化类别和产品表之间的关系来解决