【发布时间】:2011-04-09 00:22:39
【问题描述】:
亲爱的 all.i web 编程新手,直到现在我仍然学习 MySQL 语法。
现在我开始使用LEFT JOIN 方法。我知道这种方法用于在两个或多个表之间进行规范化。我在 SO 中发布了一个问题,然后我收到了一个 Answer,这让我感到困惑。我已经修改了那个答案,但我仍然感到困惑,因为它只为一张桌子使用LEFT JOIN。 LEFT JOIN是否可以在一张表中使用?
【问题讨论】:
亲爱的 all.i web 编程新手,直到现在我仍然学习 MySQL 语法。
现在我开始使用LEFT JOIN 方法。我知道这种方法用于在两个或多个表之间进行规范化。我在 SO 中发布了一个问题,然后我收到了一个 Answer,这让我感到困惑。我已经修改了那个答案,但我仍然感到困惑,因为它只为一张桌子使用LEFT JOIN。 LEFT JOIN是否可以在一张表中使用?
【问题讨论】:
你可以LEFT JOIN 一个表和它自己,就像你可以JOIN 一个表和它自己一样。您的目的通常会有所不同,因为LEFT JOIN 的具体特征是确保在右侧没有相应行时输出中的一行,当然;您可以通过检查NULL 来选择那些专门以这种方式选择的行,以查找该行的“其他部分”,该部分通常来自右侧表格。
考虑例如一个表Product,其列ID、主键、Name、Category 和Cost;您想要有关其类别中最便宜的产品的信息。然后……:
SELECT P1.Name, P1.Category, P1.Cost
FROM Product AS P1
LEFT JOIN Product AS P2
ON (P1.Category = P2.Category and P1.Cost > P2.Cost)
WHERE P2.ID IS NULL
是“表与自身的左连接”的示例,它将回答“您想要的”规范(如果多个项目在一个类别中具有相同的最低成本,您将获得它们全部 -查询实际上为您提供了这样的项目,使得它们类别中的任何项目都更便宜,并且没有检查 equal 成本的项目;-)。
【讨论】: