0

我想知道为什么这个 MySQL 查询不起作用。

MySQL 报告“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 ''subscriptions' AS sub INNER JOIN (SELECT UserIDas uid from subscriptions' at line 1) 附近使用的正确语法”

目标:我正在尝试获取指定用户房间中所有用户的不同用户信息列表。

表结构:
“订阅”表结构 - 用户所在的所有房间的表
- 订阅 ID(自动递增)
- 房间
ID - 用户 ID

“用户”表结构 - 由用户帐户详细信息组成的表
- id(自动增量)
- 昵称
- 状态
- 关于
- 等等。

我到目前为止的查询:

    SELECT * from 'subscriptions' AS sub 
    INNER JOIN (SELECT `UserID` as uid from `subscriptions` WHERE RoomID = sub.RoomID)t on       t.uid = users.id
    WHERE sub.UserID = '1'

我已经完成了一些以上述方式获取用户信息的事情。但是我一直在寻找一个“性能”升级。为了执行类似于上面列出的操作,我必须首先获取用户所在的所有房间的不同列表。然后,获取用户所在房间中所有用户的不同列表。然后 - 将每个房间中的所有成员编译为一个列表,并分别查询每个找到的用户的用户信息表。当然,有一种更有效、更合乎逻辑的方式来实现这一点。

4

1 回答 1

0

您不能在from子句中执行相关子查询。您的查询是:

SELECT *
from 'subscriptions sub INNER JOIN
      (SELECT `UserID` as uid
       from `subscriptions`
       WHERE RoomID = sub.RoomID
      ) t
      on t.uid = users.id
WHERE sub.UserID = '1';

我也在user.id修复sub.id

SELECT *
from subscriptions sub INNER JOIN
     subscriptions t
     on t.uid = sub.id and t.roomId = sub.RoomId
WHERE sub.UserID = '1';

但是,我认为您想要:

select *
from subscriptions s
where s.roomId in (select roomId from subscriptions s2 where s2.UserId = '2')
于 2013-05-17T01:34:19.130 回答