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.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"关键字。