2013-04-25 71 views
0

高中学生试图为我们学校创建一个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的朋友的事实。 4,以及它所显示的1。

为什么不提出用户3和4?我们应该尝试一个不同的代码?

+0

您正在使用什么数据库?将其添加为标签。 – GrandMasterFlush 2013-04-25 15:10:47

回答

0

看看你的子查询返回:

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

因为GROUP BY的,你失去friend伴生多个user值。

为什么使用子查询而不是简单的JOINfriends表本身?

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

+0

非常感谢! – 2013-04-29 13:49:10

相关问题