0

数据库模式

数据库模式

问题 -

找出制造商 B 生产的所有产品(任何类型)的型号和价格。

我的尝试——

SELECT b.model, b.price FROM laptop AS b 
WHERE b.model IN ( SELECT model FROM product WHERE maker = 'B')
UNION
SELECT c.model, c.price FROM pc AS c 
WHERE c.model IN ( SELECT model FROM product WHERE maker = 'B')
UNION
SELECT d.model, d.price FROM printer AS d 
WHERE d.model IN ( SELECT model FROM product WHERE maker = 'B')

即使这也没有显示仅使用 B 的正确数据集 -

SELECT b.model, b.price FROM laptop AS b 
WHERE b.model IN ( SELECT model FROM product WHERE maker = 'B')

只有一个结果集即将到来。

让我知道我在查询时犯的逻辑错误。

编辑 -

输出 -

SELECT model FROM product WHERE maker = 'B'

查询1

SELECT b.model, b.price FROM laptop AS b 
WHERE b.model IN ( SELECT model FROM product WHERE maker = 'B')

输出

询问 -SELECT * FROM product WHERE maker = 'B'

输出 -

在此处输入图像描述

4

1 回答 1

1
SELECT b.model, b.price FROM laptop AS b 
...
SELECT c.model, c.price FROM laptop AS c 
...
SELECT d.model, d.price FROM laptop AS d 

您从笔记本电脑中选择了 3 次,结果是相同的结果集。然后将UNION它们放在一起,这将删除所有重复项。

编辑:您的示例查询;

SELECT b.model, b.price FROM laptop AS b 
WHERE b.model IN ( SELECT model FROM product WHERE maker = 'B')

只会找到笔记本电脑,因为那是唯一使用的桌子。1121是PC,所以查询不会显示。

于 2013-02-01T08:58:42.477 回答