错误“ where子句中的未知列”-有什么问题?

时间:2019-01-03 16:22:40

标签: mysql sql correlated-subquery

我正在使用MySQL Server 5.7,并且有以下查询:

select 
    regDate,
    userID,
    t.teamID,
    login
from
    tbl_user u
inner join 
    tbl_team t on u.userID = t.userID
where
    regDate >= DATE_ADD(CURDATE(), INTERVAL -2 MONTH)
    AND 
    (
        select sum(transactions) from (
            SELECT count(*) as transactions FROM tbl_pp where (fromTeamID = t.teamID or forTeamID = t.teamID) and transactionDate >= u.regDate
            union all
            SELECT count(*) as transactions FROM tbl_psc where (fromTeamID = t.teamID or toTeamID = t.teamID) and transactionDate >= u.regDate
            union all
            SELECT count(*) as transactions FROM tbl_mp where (fromTeamID = t.teamID or forTeamID = t.teamID) and transactionDate >= u.regDate
        ) as all
    ) > 0

我收到此错误:

  

错误代码:1054。“ where子句”中的未知列“ t.teamID”

我确定这只是一个小问题,但现在无法解决。表teamID中存在列tbl_team。有人给我提示吗?

1 个答案:

答案 0 :(得分:4)

您不能嵌套相关引用超过一个查询深度。无论如何,最好还是使用exists

select u.regDate, u.userID, t.teamID, u.login
from tbl_user u inner join 
     tbl_team t
     on u.userID = t.userID
where u.regDate >= DATE_ADD(CURDATE(), INTERVAL -2 MONTH) and
      (exists (select 1
               from tbl_pp p
               where t.teamID in (p.fromTeamID, p.forTeamID) and
                     p.transactionDate >= u.regDate
              ) or
       exists (select 1
               from tbl_psc p
               where t.teamID in (p.fromTeamID, p.toTeamID) and
                     p.transactionDate >= u.regDate
              ) or
       exists (select 1
               from tbl_mp p
               where t.teamID in (p.fromTeamID, p.forTeamID) and
                     p.transactionDate >= u.regDate
              )
     )