曲径通幽论坛

标题: INNER JOIN -- 取得存在连接关系的两表中的记录 [打印本页]

作者: beyes    时间: 2012-7-5 14:17
标题: INNER JOIN -- 取得存在连接关系的两表中的记录
INNER JOIN 称为内连接,它可以用来取得两个存在连接关系的表中的记录。下面以 phpwind8.7 论坛程序为例,来看一下比对一下存在连接关系的两个表:

pw_members 是会员信息表,它拥有多个会员信息字段,比如 uid, username, password 等,下图之列出一部分字段:
[attach]745[/attach]


pw_friends 是会员的朋友关系表,也就是说会员和会员之间可以互相添加为朋友,也可以解除朋友关系,关于此类信息存储在该表中,其字段如下:


这两个表中存在的对应关系为: pw_members 和 pw_friends 中的 uid 都表示会员的 ID ;而 pw_friends 中的 friendid 也是 uid 的另外表达形式,可以从左到右读作:`
uid` 和 `friendid` 的关系可以从左到右解读,如 uid 为 10 的朋友的 uid 分别有 11, 2276, 2236, 2293 这几个。


因此 pw_members 中的 uid 和 pw_friends 中的 friendid 是存在着连接关系的。下面就利用这层连接关系找出 UID 为 10 的用户的所有朋友:
[Plain Text] 纯文本查看 复制代码
SELECT a.friendid, b.username FROM pw_friends a INNER JOIN pw_members b ON a.friendid = b.uid WHERE status = 0 AND a.uid = 10;

[attach]747[/attach]

实际上,如果使用的是 INNER JOIN ,那么上面的语句可将 INNER 去掉,只用 JOIN 即可。

对于上面的语句,a 和 b 分别指代了 pw_friends 和 pw_members 这两个表,使用 a 和 b 是为了语句书写的简洁。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2