【问题标题】:Subquery table-alias not being recognized in JOIN-ON/WHERE在 JOIN-ON/WHERE 中未识别子查询表别名
【发布时间】:2018-08-10 19:11:29
【问题描述】:

我正在尝试向一个业余爱好者朋友提供一些帮助,使用 SQL Server 经验来帮助使用 MySQL。

他正在开发一个游戏数据库。我为他写了这个查询

SELECT ib.itemid, ii.realname as name, ib.stackSize,
       IFNULL(ah.price, '-') as price, ah.stock
    FROM item_basic ib
    LEFT OUTER JOIN item_info as ii ON ii.itemID = ib.itemID
    LEFT OUTER JOIN (SELECT price, COUNT(*) as stock
        FROM auction_house
        GROUP BY itemID) as AH on ii.itemID = AH.itemID -- erring line
    ORDER BY ii.realname

还有一个版本在 FROM cluse 中组装了子查询,而不是 JOIN,但这比这个版本麻烦。

这给出了错误 Unknown column 'ah.itemID' in 'on clause'

如果我错误地将错误行更改为... ii.itemID = ib.itemID,则查询会执行,但结果当然不正确(在这种情况下是指数翻倍)。

这是一个带有示例数据的 SQL Fiddle

【问题讨论】:

    标签: mysql outer-join table-alias


    【解决方案1】:

    这是因为您没有在子查询中选择 itemID。此外,您正在选择价格列而不进行聚合。换个试试

    LEFT OUTER JOIN (SELECT price, COUNT(*) as stock
            FROM auction_house
            GROUP BY itemID) as AH on ii.itemID = AH.itemID
    

    LEFT OUTER JOIN (SELECT itemID, price, COUNT(*) as stock
            FROM auction_house
            GROUP BY itemID, price) as AH on ii.itemID = AH.itemID
    

    【讨论】:

    • 这很明显。我变得如此专注,错过了显而易见的事情。感谢您的新鲜眼睛。
    【解决方案2】:

    没有AH.itemID,只能访问子查询的结果。

    【讨论】:

    • ...呃,只见树木不见森林。
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 2016-09-16
    • 2013-05-22
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多