数据库架构
问题-
Find out the models and prices for all the products (of any type) produced by maker 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'
SELECT b.model, b.price FROM laptop AS b
WHERE b.model IN ( SELECT model FROM product WHERE maker = 'B')
查询 - SELECT * FROM 产品 WHEREmaker = 'B'
输出 -
最佳答案
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')
只会找到笔记本电脑,因为这是唯一使用的 table 。 1121是PC,所以查询不会显示它。
关于mysql - mysql 中的 IN 和 UNION 数据集未正确形成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14642611/