我有这些表格:
用户,一个表包含用户:
+--------------------------
| 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以下。 哦,我不希望狗会出现两次。任何人都能给我一些线索吗?答案 0 :(得分:1)
您必须将所有表格加入正确的列
Users
致Users_Friend_Relation
获取 Steve的朋友 Users_Dogs_Relations
致Users_Friend_Relation
获取*史蒂夫*朋友的狗Dogs
以Users_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'