复杂选择的MySql查询

复杂选择的MySql查询,mysql,sql,Mysql,Sql,我有这些桌子: 用户,一个表包含以下用户: +-------------------------- | ID | Name | +-------------------------- 狗,一个包含狗的表格(上次更改是一个时间戳,告知此狗状态上次更改的时间): 用户与狗的关系,一个描述哪只狗属于哪个用户的表,其中多只狗可以属于一个用户,多个用户可以拥有同一只狗,多只狗可以属于多个用户。(简而言之,任何用户都可以与任何狗相关): 用户\朋友\关系,一个表描述了哪个用户是

我有这些桌子:

用户,一个表包含以下用户:

+--------------------------
| ID    |     Name        |
+--------------------------
,一个包含狗的表格(上次更改是一个时间戳,告知此狗状态上次更改的时间):

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

用户\朋友\关系,一个表描述了哪个用户是哪个用户的朋友:

+------------------------------------
|   UserID1     |       UserID2     |
+------------------------------------
我想做的是告诉Steve(其中一个用户),他的朋友们拥有的所有狗的名字(由Last_在给定时间戳上更改了)

例如,给定时间为11:23:00的Steve将查询Steve朋友按时间戳订购的所有狗,并且仅在11:23:00以下。
哦,我不希望狗出现两次。有人能给我一些线索吗?

你必须在正确的列上连接所有表

  • Users
    Users\u-Friend\u-Relation
    获取Steve的朋友
  • Users\u Dogs\u Relations
    Users\u Friend\u Relations
    获取*Steve*s friends的狗
  • 用户与狗的关系
    获取这些狗的名字
并指定您的
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'
选择不同的d.名称
来自用户u1
在u1.ID=f.User1ID上加入用户\朋友\关系f
在udr.UserID=f.User2ID上加入用户\u狗\u关系udr
在udr上加入狗d。狗ID=d.ID
其中u1.Name=Steve
d.最后一次更改时间为<'11:23:00'

您能提供样本记录吗?
+------------------------------------
|   UserID1     |       UserID2     |
+------------------------------------
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'