Mysql 在JOIN-ON/WHERE中无法识别子查询表别名

Mysql 在JOIN-ON/WHERE中无法识别子查询表别名,mysql,outer-join,table-alias,Mysql,Outer Join,Table Alias,我正试图向一位业余朋友提供一些帮助,利用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.item

我正试图向一位业余朋友提供一些帮助,利用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来组装子查询,但它没有这个版本那么麻烦

这会在“on子句”中出现错误
未知列“ah.itemID”
如果我错误地将错误行更改为
。。。ii.itemID=ib.itemID
,执行查询,但结果当然是不正确的(在本例中是指数倍)


这是一个包含示例数据的

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

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

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

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


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

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


…嗯,看不见森林就看不见树木…嗯,看不见森林就看不见树木。这太明显了。我变得如此专注,错过了显而易见的事情。谢谢你的新鲜眼光,太明显了。我变得如此专注,错过了显而易见的事情。谢谢你的新眼光。