5.6.3 自连接

所谓自连接,就是把自身表的一个引用作为另一个表来处理,这样就能获取一些特殊的数据。

【示例38】自连接

获取表PRODUCTINFO中数量相等的不同产品。执行以下脚本:


01 SELECT p.productname,p.productprice,pr.productname,pr.productprice,pr.quantity

02 FROM productinfo p,productinfo pr

03 WHERE p.productid != pr.productid

04 AND p.quantity=pr.quantity

05 AND p.rowid<pr.rowid;


【代码解析】

❑为了满足题意,该查询使用了多个连接条件,包括等值连接和不等值连接。

❑第3行表示查询两个表中产品ID不相等的数据,这么做是为了避免查询结果的记录中出现两个产品ID一样的数据,这种数据是没有意义的,因为自身同自身的数量比永远是相等的。

❑第4行表示查询数量相等的数据。

❑第5行表示去除重复的记录,只取ROWID比较小的那一条。

【执行效果】

执行效果见图5.38。

5.6.3 自连接 - 图1

图 5.38 自连接查询

示例中的脚本和下面的脚本同样是等效的。


SELECT p.productname,p.productprice,pr.productname,pr.productprice,pr.quantity

FROM productinfo p JOIN productinfo pr

ON p.productid != pr.productid

AND p.quantity=pr.quantity

AND p.rowid<pr.rowid;


语句中省略了"INNER"关键字。