MySql查询复杂的选择

时间:2013-04-07 14:19:09

标签: mysql sql

我有这些表格:

用户,一个表包含用户:

+--------------------------
| ID    |     Name        |
+--------------------------

,一张桌子包含了狗(最后一次更改是一个时间戳,告诉这条狗的状态最后一次更改):

+---------------------------------------------------------
| ID    |       Name       |        Last_Changed_At      |
+---------------------------------------------------------

Users_Dogs_Relations ,一个描述哪条狗属于哪个用户的表,其中多条狗可以属于一个用户,多个用户可以拥有相同的狗,多条狗可以属于多个用户。 (简而言之,任何用户都可以与任何狗相关):

+------------------------------------
|   UserID        |     DogID       |
+------------------------------------

Users_Friend_Relation ,表格描述哪个用户是哪个用户的朋友:

+------------------------------------
|   UserID1     |       UserID2     |
+------------------------------------

我想要做的是告诉史蒂夫(其中一个用户),他朋友的所有狗的名字(由给定时间戳的Last_Changed_At命令)。

例如,史蒂夫在给定时间11:23:00,将查询史蒂夫的所有朋友按时间戳排序并且仅在11:23:00以下。 哦,我不希望狗会出现两次。任何人都能给我一些线索吗?

1 个答案:

答案 0 :(得分:1)

您必须将所有表格加入正确的列

  • UsersUsers_Friend_Relation获取 Steve的朋友
  • Users_Dogs_RelationsUsers_Friend_Relation获取*史蒂夫*朋友的狗
  • DogsUsers_Dogs_Relations获取这些狗的名字

并指定您的where条件。

SELECT DISTINCT d.Name
FROM Users u1
JOIN Users_Friend_Relation f ON u1.ID = f.User1ID
JOIN Users_Dogs_Relations udr ON udr.UserID = f.User2ID
JOIN Dogs d ON udr.DogID = d.ID
WHERE u1.Name = Steve
AND d.Last_Changed_At < '11:23:00'