在join on/where中无法识别子查询表别名

v64noz0r  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(470)

我想借一些帮助给一个爱好者的朋友,用sqlserver的经验来帮助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 ,则执行查询,但结果当然是不正确的(在本例中是指数倍)。
下面是一个sql摆弄示例数据。

nnt7mjpx

nnt7mjpx1#

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

yc0p9oo0

yc0p9oo02#

这是因为您没有在子查询中选择itemid。另外,选择price列时不按它进行聚合。尝试替换

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

相关问题