代码之家  ›  专栏  ›  技术社区  ›  Regular Jo

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

  •  0
  • Regular Jo  · 技术社区  · 6 年前

    我想给一个业余朋友一些帮助,用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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Josh Eller    6 年前

    这是因为您没有在子查询中选择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
    
        2
  •  1
  •   Uueerdo    6 年前

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