2013-04-07 81 views
0

我有這些表:MySQL查詢的複雜選擇

用戶,A表包含用戶:

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

,A表包含狗(最後更新是一個時間戳告訴當這種狗的狀態最後一次修改):

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

Users_Dogs_關係,描述哪個狗屬於哪個用戶,哪些狗可以屬於一個用戶,多個用戶可以具有相同的狗,並且多個狗可以屬於多個用戶的表格。 (總之,任何用戶都可以與任何狗):

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

Users_Friend_Relation,A表描述了用戶的朋友哪個用戶:

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

我想要做的是告訴史蒂夫(其中一個用戶),他的朋友擁有的所有狗的名字(由Last_Changed_At從給定的時間戳中排序)。

例如,史蒂夫與給定的時間11:23:00,將查詢史蒂夫的朋友所有的狗的時間戳,只有在下午11:23:00。 哦,我不希望那些狗會出現兩次。任何人都可以給我一些線索?

+0

你能給出樣本記錄嗎? – 2013-04-07 14:23:00

回答

1

你必須加入對正確列所有表

  • UsersUsers_Friend_Relation得到的朋友史蒂夫
  • 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'