title: MySQL "Every derived table must have its own alias"
body: <p>I am a little confused by this strange MySQL behaviour. I am receiving the dreaded <code>Every derived table must have its own alias</code> error.</p>
  
  <p>Usually, I can circumvent this by adding an <code>AS</code> clause to the primary <code>SELECT</code> statement, however it does not see to work with the following example:</p>
  
  <pre><code>SELECT SUM (`a`.`total`) AS `total` FROM (
      SELECT COUNT(DISTINCT(`item_sales`.`id`)) AS `total`,
      (SELECT COUNT(DISTINCT(`sale_item`)) AS `offers` FROM `item_sales_bids` WHERE `user_id` = 2) AS `offers`
          FROM `item_sales`
          INNER JOIN `item_sales_bids` ON `item_sales`.`id` = `item_sales_bids`.`sale_item`
          WHERE `item_sales`.`buyer` != 2
              AND `item_sales`.`sold` = 1
          GROUP BY `item_sales`.`id`
          HAVING `offers` &gt; 0
      ) UNION (
          SELECT COUNT(*) AS `total`,
              `item_sales`.`reserve`,
              (SELECT COUNT(*) FROM `item_sales_bids` WHERE `user_id` = 2) AS `bids`,
              (SELECT MAX(`max_bid`) AS `max` FROM `item_sales_bids` WHERE `user_id` = 2) AS `maxBid`,
              SUM((`item_sales`.`list_date` + (`item_sales`.duration * 86400)) - UNIX_TIMESTAMP()) AS `endTime`
              FROM `item_sales`
              INNER JOIN `item_sales_bids` ON `item_sales_bids`.`sale_item` = `item_sales`.`id`
              GROUP BY `item_sales`.`id`
              HAVING `endTime` &lt; 0
                  AND `maxBid` &lt; `item_sales`.`reserve`
      )
  ) `a`
  </code></pre>
  
  <p>Can anyone point out what I am missing? Please note that adding an alias to the joins results in the same error.</p>