【问题标题】:Error "Unknown column in where clause" - What is wrong?错误“where 子句中的未知列” - 出了什么问题?
【发布时间】:2019-01-03 16:22:39
【问题描述】:

我使用的是 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 中。有人给我提示吗?

【问题讨论】:

    标签: mysql sql correlated-subquery


    【解决方案1】:

    您不能将相关引用嵌套在一个以上的查询深处。你最好还是使用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
                  )
         )
    

    【讨论】:

    • 谢谢。我不知道。但是使用您的解决方案,错误仍然是一样的。
    • @dns_nx 。 . . tbl_team 是否有一个名为 teamID 的列?
    • 是的,如上所述。
    • 我明白了。您在 tbl_psc 'forTeamID' 的查询中写了,但它是 'toTeamID'。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多