http://laser.zhengmai.com.cn/pgsqldoc-7.2c/tutorial-join.html
现在我们将看看如何能把Hayward记录找回来. 我们想让查询干的事是扫描 weather 表, 并且对每一行都找出匹配的 cities 表里面的行. 如果我们没有找到匹配的行,那么我们需要一些"空值" 代替cities表的字段.这种类型的查询叫 外连接(outer join).(我们在此之前看到的 连接都是内部连接.)这样的命令看起来象这样∶ SELECT *
FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name); city | temp_lo | temp_hi | prcp | date | name | location
---------------+---------+---------+------+------------+---------------+-----------
Hayward | 37 | 54 | | 1994-11-29 | |
San Francisco | 46 | 50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
San Francisco | 43 | 57 | 0 | 1994-11-29 | San Francisco | (-194,53)
(3 rows)
这个查询是一个左手边外连接(left outer join) 因为在连接操作符(译注∶LEFT OUTER JOIN)左手边的表中的行在输出中 至少要出现一次,而在右手边的行将只输出那些与左手边行有对应匹配的行. 如果输出的左手边表的行没有对应匹配的右手边表的行,那么在右手边行 的字段将填充空(NULL).
现在我们将看看如何能把Hayward记录找回来. 我们想让查询干的事是扫描 weather 表, 并且对每一行都找出匹配的 cities 表里面的行. 如果我们没有找到匹配的行,那么我们需要一些"空值" 代替cities表的字段.这种类型的查询叫 外连接(outer join).(我们在此之前看到的 连接都是内部连接.)这样的命令看起来象这样∶ SELECT *
FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name); city | temp_lo | temp_hi | prcp | date | name | location
---------------+---------+---------+------+------------+---------------+-----------
Hayward | 37 | 54 | | 1994-11-29 | |
San Francisco | 46 | 50 | 0.25 | 1994-11-27 | San Francisco | (-194,53)
San Francisco | 43 | 57 | 0 | 1994-11-29 | San Francisco | (-194,53)
(3 rows)
这个查询是一个左手边外连接(left outer join) 因为在连接操作符(译注∶LEFT OUTER JOIN)左手边的表中的行在输出中 至少要出现一次,而在右手边的行将只输出那些与左手边行有对应匹配的行. 如果输出的左手边表的行没有对应匹配的右手边表的行,那么在右手边行 的字段将填充空(NULL).
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货