我有 3 个表,为了这个练习,我们将它们称为:Products、Price 和 Discount。我正在尝试加入 Products 和 Price 表,仅当在 Discount.ProductID(折扣表中的 ProductID 列)中找到 ProductID 时。
产品:
产品编号 | 尺寸 | 颜色 | 参考编号 |
---|---|---|---|
A1234 | 小的 | 蓝光 | 0C94 |
B5678 | 和 | 红色的 | 1D96 |
价钱:
参考编号 | 根据 | 税 |
---|---|---|
0C94 | 3.48 | 0.96 |
折扣:
产品编号 | 列表 | 地点 |
---|---|---|
A1234 | 二 | 三 |
我熟悉连接,所以我的代码开始为:
SELECT * FROM Product as a
left join Price as b
on a.Ref# = b.Ref#
但我从未在基于第三个表的 where 子句中嵌套约束(如果这甚至是正确的方法)。任何建议将不胜感激。最终结果将是一个仅显示一种产品的新产品表,因为 ProductID B5678 不在折扣表中。
如果不需要 Discount 表的任何内容,请使用exists()函数在 where 子句中执行子查询。这将为您提供最快的结果。
SELECT *
FROM Product as a
left join Price as b on a.Ref# = b.Ref#
WHERE EXISTS (
SELECT *
FROM Discount as c
WHERE c.ProductID = a.ProductID
)
但是,如果您确实需要一列或多列折扣,请在 Product 和 Discount 之间进行内部连接,在 ProductID 上连接它们。这将导致只有有折扣的产品,然后对价格进行另一个左连接,以将价格中的列也放入结果集中。请注意,如果一个 Product 行的 Discount 中存在多行,这将导致在多行中显示相同的产品。
SELECT *
FROM Product as a
inner join Discount as c on c.ProductID = a.ProductID
left join Price as b on a.Ref# = b.Ref#
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句