高中生试图为我们学校创建一个版本的Facebook。现在,在我们发布它之前,我们仍然坚持加入试用数据库中的表。
加入表格帖子,用户和朋友:
users user name 1 Hallie 2 Dylan 3 Sarina 4 Dominic friends user friend 1 2 1 3 1 4 2 1 3 1 4 1 2 4 4 2 3 2 2 3 posts | user | postid | post | +------+--------+------+ | 1 | 101 | This is TigerBook! | | 2 | 102 | I am pregnant. | | 1 | 103 | I like peeps | | 4 | 104 | Giant Buzz Lightyears rock. | | 3 | 105 | Die Tucker die | | 1 | 106 | Murhur de derpity derp | | 2 | 107 | banana spaghetti squid | | 4 | 108 | chicken |
我们使用了这段代码:
SELECT users.user,
users.name,
posts.postid,
posts.post,
tmp.friend
FROM (SELECT friend,
user
FROM friends
GROUP BY friend) AS tmp
JOIN users
ON tmp.user = users.user
JOIN posts
ON posts.user = users.user;
它得出结果:
+------+---------+--------+-------------------------+--------+ | user | name | postid | post | friend | +------+---------+--------+-------------------------+--------+ | 1 | Hallie | 101 | This is TigerBook! | 2 | | 1 | Hallie | 101 | This is TigerBook! | 3 | | 1 | Hallie | 101 | This is TigerBook! | 4 | | 2 | Dylan | 102 | I am pregnant. | 1 | | 1 | Hallie | 103 | I like peeps | 2 | | 1 | Hallie | 103 | I like peeps | 3 | | 1 | Hallie | 103 | I like peeps | 4 | | 1 | Hallie | 106 | Murhur de derpity derp | 2 | | 1 | Hallie | 106 | Murhur de derpity derp | 3 | | 1 | Hallie | 106 | Murhur de derpity derp | 4 | | 2 | Dylan | 107 | banana spaghetti squid | 1 | +------+---------+--------+-------------------------+--------+
它删除了用户3和4发布的帖子104,105和108.它忽略了用户2是3和4的朋友以及它显示的1的事实。
为什么不提出用户3和4?我们应该尝试不同的代码吗?
答案 0 :(得分:0)
查看子查询返回的内容:
| FRIEND | USER |
-----------------
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
由于GROUP BY
,您会丢失与user
相关联的多个friend
值。
为什么使用子查询而不是简单JOIN
使用friends
表本身?
SELECT users.user,
users.name,
posts.postid,
posts.post,
friends.friend
FROM friends
JOIN users
ON friends.user = users.user
JOIN posts
ON posts.user = users.user;
| USER | NAME | POSTID | POST | FRIEND |
------------------------------------------------------------------
| 1 | Hallie | 101 | This is TigerBook! | 2 |
| 1 | Hallie | 103 | I like peeps | 2 |
| 1 | Hallie | 106 | Murhur de derpity derp | 2 |
| 1 | Hallie | 101 | This is TigerBook! | 3 |
| 1 | Hallie | 103 | I like peeps | 3 |
| 1 | Hallie | 106 | Murhur de derpity derp | 3 |
| 1 | Hallie | 101 | This is TigerBook! | 4 |
| 1 | Hallie | 103 | I like peeps | 4 |
| 1 | Hallie | 106 | Murhur de derpity derp | 4 |
| 2 | Dylan | 102 | I am pregnant. | 1 |
| 2 | Dylan | 107 | banana spaghetti squid | 1 |
| 2 | Dylan | 102 | I am pregnant. | 3 |
| 2 | Dylan | 107 | banana spaghetti squid | 3 |
| 2 | Dylan | 102 | I am pregnant. | 4 |
| 2 | Dylan | 107 | banana spaghetti squid | 4 |
| 3 | Sarina | 105 | Die Tucker die | 1 |
| 3 | Sarina | 105 | Die Tucker die | 2 |
| 4 | Dominic | 104 | Giant Buzz Lightyears rock. | 1 |
| 4 | Dominic | 108 | chicken | 1 |
| 4 | Dominic | 104 | Giant Buzz Lightyears rock. | 2 |
| 4 | Dominic | 108 | chicken | 2 |