如何理解这个查询?

时间:2019-07-10 13:50:33

标签: sql oracle self-join

SELECT DISTINCT
    ...
    ...
    ...
FROM Reviews Rev
    INNER JOIN Reviews SubRev ON Subrev.W_ID=Rev.ID
WHERE Rev.Status='Approved'

这只是我今天一直试图理解的长查询的一小部分。联接发生了什么?评论表似乎以不同的别名与自身连接在一起。为什么要这样做?它能达到什么目的?此外,对于仍然选择并返回的条目,Reviews表的ID字段为空。这是正确的,但是我不明白如果W_ID字段不为null会发生这种情况。

1 个答案:

答案 0 :(得分:1)

它允许您将表中的一行连接到表中的另一行。

在您可能在这些行之间存在关系的情况下,我都已经看过了,并亲自使用了它。

实际示例:

  • 记录的旧版本和更新的版本
  • 某种等级关系(例如,如果表包含人的记录,则可以记录某人是某人的父母)。可能还有许多其他可能的用例。

SQL允许您创建一个外键,该外键在同一张表的两个不同列之间建立联系。