0

高中学生试图为我们学校创建一个 Facebook 版本。现在,在我们发布之前,我们一直在连接试用数据库中的表。

要加入表格帖子、用户和朋友:

用户
用户名
1 哈莉  
2 迪伦
3 萨丽娜
4 多米尼克

朋友们
用户朋友
1 2
1 3
1 4
2 1
3 1
4 1
2 4
4 2
3 2
2 3

帖子
| 用户 | 邮政编码 | 发布 |
+--------+--------+------+
| 1 | 101 | 这是虎书!|
| 2 | 102 | 我怀孕了。|
| 1 | 103 | 我喜欢偷看|
| 4 | 104 | 巨大的巴斯光年岩石。|
| 3 | 105 | 模具塔克模具 |
| 1 | 106 | Murhur de derpity derp |
| 2 | 107 | 香蕉意大利面鱿鱼| 高分辨率照片| CLIPARTO
| 4 | 108 | 鸡|

我们使用了这段代码:

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; 

结果是:

+--------+---------+--------+---------- --+--------+
| 用户 | 姓名 | 邮政编码 | 发布 | 朋友 |
+--------+---------+--------+---------- --+--------+
| 1 | 哈莉 | 101 | 这是虎书!| 2 |
| 1 | 哈莉 | 101 | 这是虎书!| 3 |
| 1 | 哈莉 | 101 | 这是虎书!| 4 |
| 2 | 迪伦 | 102 | 我怀孕了。| 1 |
| 1 | 哈莉 | 103 | 我喜欢偷看| 2 |
| 1 | 哈莉 | 103 | 我喜欢偷看| 3 |
| 1 | 哈莉 | 103 | 我喜欢偷看| 4 |
| 1 | 哈莉 | 106 | Murhur de derpity derp | 2 |
| 1 | 哈莉 | 106 | Murhur de derpity derp | 3 |
| 1 | 哈莉 | 106 | Murhur de derpity derp | 4 |
| 2 | 迪伦 | 107 | 香蕉意大利面鱿鱼| 高分辨率照片| CLIPARTO 1 |
+--------+---------+--------+---------- --+--------+

它删除了由用户 3 和 4 发布的帖子 104、105 和 108。它忽略了用户 2 是用户 3 和 4 的朋友以及它显示的用户 1 的事实。

为什么不显示用户 3 和 4?我们应该尝试不同的代码吗?

4

1 回答 1

0

看看你的子查询返回什么:

| FRIEND | USER |
-----------------
|      1 |    2 |
|      2 |    1 |
|      3 |    1 |
|      4 |    1 |

由于GROUP BY,您会丢失与 s 关联的多个userfriend

为什么您使用子查询而不是简单地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 |

http://sqlfiddle.com/#!2/27eb3d/6

于 2013-04-25T21:06:15.093 回答