我目前正在尝试使用纯T-SQL,而无需使用C#完成额外的工作,以找到与产品列表最便宜的商店匹配。
找到最便宜的匹配效果很好,但我的问题是找到的匹配(商店)不一定包含列表中的所有项目。
此操作所需的表格是: 超市 - 所有超市。 ListItems - 连接项目列表和产品的表格。 AvailProducts - 在产品和超市之间进行链接的表格。如果某个产品ID和超市ID不存在行,则表示超市根本没有该产品。这是保存产品价格的表格。
我目前的测试SQL语句应该返回最多5个超市,这些超市的订购产品从最便宜到最便宜的订购,看起来像这样:
SELECT TOP 5 AvailProducts.[SuperID], SUM(AvailProducts.[Price]) AS "Price"
FROM AvailProducts, ListItems, Supermarkets
WHERE ListItems.[ListID]=3
AND AvailProducts.[ProductID]=ListItems.[ProductID]
AND AvailProducts.[SuperID]=Supermarkets.[ID]
AND (SELECT COUNT(*) FROM AvailProducts, ListItems WHERE AvailProducts.[ProductID]=ListItems.[ProductID] AND ListItems.[ListID]=3 AND AvailProducts.[SuperID]=)=(SELECT COUNT(*) FROM ListItems WHERE [ListID]=3)
GROUP BY AvailProducts.[SuperID]
ORDER BY SUM(AvailProducts.[Price])
底部的第三行应该计算超市中可用的列表项的数量,如果列表项的数量和这个超市中的可用项数相等,则只返回超市的ID。
但是,这不起作用,因为我无法在此声明中指定当前超市的ID。