Mat*_*ens 5 mysql sql subquery in-subquery
以下MySQL查询:
select `userID` as uID,
(select `siteID` from `users` where `userID` = uID) as `sID`,
from `actions`
where `sID` in (select `siteID` from `sites` where `foo` = "bar")
order by `timestamp` desc limit 100
Run Code Online (Sandbox Code Playgroud)
...返回错误:
Unknown column 'sID' in 'IN/ALL/ANY subquery'
Run Code Online (Sandbox Code Playgroud)
我不明白我在这里做错了什么.这个sID东西不应该是一个列,而是我通过执行创建的'别名'(这叫做什么?)(select siteID from users where userID = uID) as sID.它甚至不在IN子查询中.
有任何想法吗?
编辑: @Roland:感谢您的评论.我有三张桌子actions,users和sites.该表actions包含一个userID字段,该字段对应于表中的条目users.此表(users)中的每个用户都有一个siteID.我正在尝试从actions表中选择最新的操作,并将它们链接到users和sites表,以找出执行这些操作的人员以及在哪个站点上.希望有道理:)
Qua*_*noi 12
您需要将其括在子查询中:
SELECT *
FROM (
SELECT userID as uID, (select siteID from users where userID = actions.userID) as sID,
FROM actions
) q
WHERE sID IN (select siteID from sites where foo = "bar")
ORDER BY
timestamp DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
,或者,更好的是,将其重写为 JOIN
SELECT a.userId, u.siteID
FROM actions a
JOIN users u
ON u.userID = a.userID
WHERE siteID IN
(
SELECT siteID
FROM sites
WHERE foo = 'bar'
)
ORDER BY
timestamp DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)
创建以下索引:
actions (timestamp)
users (userId)
sites (foo, siteID)
Run Code Online (Sandbox Code Playgroud)