0

我正在尝试向一个业余爱好者朋友提供一些帮助,使用 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 。

4

2 回答 2

1

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

于 2018-08-10T19:15:18.957 回答
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
于 2018-08-10T19:15:34.597 回答