【问题标题】:SQL Unknown column, despite it definitely being there - SQL Error (1054)SQL 未知列,尽管它肯定存在 - SQL 错误 (1054)
【发布时间】:2016-05-15 08:50:13
【问题描述】:

我的 sql 有问题,我正在尝试根据用户的年龄组显示用户,将字符串与主键一起附加,但我只希望显示一个值

我相信是这样的

SELECT users.gbpfid,
       users.aid,
       compresults.total,
       agegroup.aid AS aid2
FROM   compresults
       INNER JOIN competitions
               ON competitions.cid = compresults.cid
       INNER JOIN agegroup
               ON agegroup.aid = users.aid
       INNER JOIN users
               ON compresults.gbpfid = users.gbpfid
WHERE  competitions.compdate = (SELECT competitions.compdate
                                FROM   competitions
                                       INNER JOIN compresults
                                               ON compresults.cid =
                                                  competitions.cid
                                WHERE  compresults.gbpfid = users.gbpfid
                                ORDER  BY competitions.compdate DESC
                                LIMIT  1) 

但是这会引发这个错误

SQL 错误 (1054):“on 子句”中的未知列“users.aid”

我没有任何意义

当我删除 第 5 行的“在 agegroup.aid = users.aid”

它显示记录,但对于每个辅助工具

我很困惑它如何识别没有内部连接(指定连接)的列,但是当我对年龄组表进行整个内部连接时,它可以正常连接,但包含所有记录

有什么想法吗?谢谢

【问题讨论】:

    标签: mysql


    【解决方案1】:

    问题的原因是连接是从左到右处理的。在您的代码中,您有以下顺序:

       INNER JOIN agegroup
               ON agegroup.aid = users.aid
       INNER JOIN users
    

    因此,在ON agegroup.aid = users.aid 中,您引用了用户表之前它加入了战斗。

    改变连接的顺序:

    compresults -> 比赛 -> 用户 -> 年龄组

    【讨论】:

      【解决方案2】:

      您正在尝试使用 users.aid 在加入用户表之前加入年龄组。

         INNER JOIN competitions
                 ON competitions.cid = compresults.cid
         INNER JOIN agegroup
                 ON agegroup.aid = users.aid
         INNER JOIN users
                 ON compresults.gbpfid = users.gbpfid
      

      如您所见,您在加入之前确实可以访问 users.aid。将连接的顺序更改为:

      competitions -> users -> agegroup
      

      这应该可行:

         INNER JOIN competitions
                 ON competitions.cid = compresults.cid
         INNER JOIN users
                 ON compresults.gbpfid = users.gbpfid               
         INNER JOIN agegroup
                 ON agegroup.aid = users.aid
      

      您现在应该可以访问 users.aid。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-08-19
        • 1970-01-01
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 2016-04-01
        • 2012-03-09
        • 2017-03-17
        相关资源
        最近更新 更多