我有几张桌子:
用户,一个表包含以下用户:
+--------------------------
| ID | Name |
+--------------------------dogs ,一个表包含狗(“最后的更改”是一个时间戳,用于指示此狗状态上次更改的时间):
+---------------------------------------------------------
| ID | Name | Last_Changed_At |
+---------------------------------------------------------Users_Dogs_Relations,表描述哪个狗属于哪个用户,哪里多个狗可以属于一个用户,多个用户可以拥有同一个狗,多个狗可以属于多个用户。(简而言之,任何用户都可以与任何狗有关联):
+------------------------------------
| UserID | DogID |
+------------------------------------Users_Friend_Relation,表描述哪个用户是哪个用户的朋友:
+------------------------------------
| UserID1 | UserID2 |
+------------------------------------我想要做的是告诉史蒂夫(用户之一),所有狗的名字,他的朋友有(由Last_Changed_At从一个给定的时间戳)。
例如,史蒂夫在给定的时间11:23:00,将查询所有的狗史蒂夫的朋友订购的时间戳,只有以下11:23:00。哦,我不想让狗出现两次。有人能给我点线索吗?
发布于 2013-04-07 14:24:48
您必须将所有表连接到正确的列上。
Users到Users_Friend_Relation去找史蒂夫的朋友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'https://stackoverflow.com/questions/15863403
复制相似问题