0

我有 4 个带有以下架构的表:

  • 产品(制造商、型号、类型)
  • PC(型号、速度、内存、高清、价格)
  • 笔记本电脑(型号、速度、内存、高清、屏幕、价格)
  • 打印机(型号、颜色、类型、价格)

假设我需要在 2000 美元的预算内购买一台 PC、一台笔记本电脑和一台打印机。我应该使用什么查询来查找低于此预算的所有可用选项?

显然,对于这个问题,我需要查看#'sPC、笔记本电脑和打印机的所有型号,并过滤掉每种产品的各自价格。

但我不太确定在 where 子句中需要什么才能正确执行此操作。

select Product.model
from Product, PC, Laptop, Printer
where ... ???
4

4 回答 4

2

我猜你可以从这些方面开始

Select * 
From PC, Laptop, Printer
Where (PC.price + Laptop.price + Printer.price) <= 2000

隐含的连接“来自 PC、笔记本电脑、打印机”将生成所有组合,因为没有“连接位置”,然后您只需选择与您的定价标准匹配的组合。

于 2013-10-09T11:14:10.700 回答
0

您可以尝试 CROSS JOIN 或 CROSS APPLY 以获得所有可能的组合,然后过滤掉所有价格总和小于 2K$ 的组合

就像是

SELECT
*
FROM PC
CROSS APPLY Laptop
CROSS APPLY Printer
WHERE
PC.price + Laptop.price + Printer.price < 2000

于 2013-10-09T11:27:46.657 回答
0

尝试

select Product.model
  from Product a, PC b, Laptop c, Printer d
 where a.model = b.model
   and a.model = c.model
   and a.model = d.model
   and b.model = c.model
   and b.model = d.model
   and c.model = d.model

这是一个不好的查询,最好分开查询会得到更好的性能

于 2013-10-09T11:12:58.583 回答
0
select PC.Model, PC.Price, Laptop.Model, Laptop.Price, Printer.Model, Printer.Price
from PC, Laptop, Printer
where (PC.price + Laptop.Price + Printer.Price) <= 2000

这对你有用吗?

于 2013-10-09T11:14:47.200 回答