MySQL多个UNION与别名

时间:2017-05-26 00:45:44

标签: mysql sql pdo

我已经看了好几个小时了,我无法发现错误:

  

致命错误:未捕获的异常'PDOException',消息为'SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法错误;查看与您的MySQL服务器版本对应的手册,以便在't2 UNION附近使用正确的语法(在第34行选择a.item_id'

我尝试了不同的括号和别名变体,我尝试将SELECT DISTINCTUNION ALL一起使用,我已经验证?参数的数量匹配......我是什么丢失?

SELECT COUNT(*)
FROM (SELECT    a.item_id
      FROM      catalog_items AS a
      JOIN      catalog_franchises AS b ON a.game_id = b.franchise_id
      JOIN      catalog_franchises AS c ON a.manufacturer_id = c.franchise_id
      LEFT JOIN catalog_franchises AS d ON a.exclusive_id = d.franchise_id
      JOIN      catalog_item_categories AS e ON a.item_id = e.item_id
                AND e.valid = TRUE
      JOIN      catalog_categories AS f ON e.cat_id = f.cat_id AND f.parent_id = ?
                AND f.cat_id IN (?,?,?) AND f.valid = TRUE
      WHERE     d.franchise_id = ?
                AND a.valid = TRUE
                AND b.valid = TRUE
                AND c.valid = TRUE
                AND (d.valid = TRUE OR d.title IS NULL)
                AND a.region_id = ?
                AND a.quantity IS NOT NULL) t1
      UNION
     (SELECT    a.item_id
      FROM      catalog_items AS a
      JOIN      catalog_franchises AS b ON a.game_id = b.franchise_id
      JOIN      catalog_franchises AS c ON a.manufacturer_id = c.franchise_id
      LEFT JOIN catalog_franchises AS d ON a.exclusive_id = d.franchise_id
      JOIN      catalog_item_categories AS e ON a.item_id = e.item_id
                AND e.valid = TRUE
      JOIN      catalog_categories AS f ON e.cat_id = f.cat_id AND f.parent_id = ?
                AND f.cat_id IN (?,?) AND f.valid = TRUE
      WHERE     d.franchise_id = ?
                AND a.valid = TRUE
                AND b.valid = TRUE
                AND c.valid = TRUE
                AND (d.valid = TRUE OR d.title IS NULL)
                AND a.region_id = ?
                AND a.quantity IS NOT NULL) t2
      UNION
     (SELECT    a.item_id
      FROM      catalog_items AS a
      JOIN      catalog_franchises AS b ON a.game_id = b.franchise_id
      JOIN      catalog_franchises AS c ON a.manufacturer_id = c.franchise_id
      LEFT JOIN catalog_franchises AS d ON a.exclusive_id = d.franchise_id
      JOIN      catalog_editions AS e ON a.edition_id = e.edition_id AND e.edition_id IN (?,?,?) AND e.valid = TRUE
      WHERE     d.franchise_id = ?
                AND a.valid = TRUE
                AND b.valid = TRUE
                AND c.valid = TRUE
                AND (d.valid = TRUE OR d.title IS NULL)
                AND a.region_id = ?
                AND a.quantity IS NOT NULL) t3

1 个答案:

答案 0 :(得分:1)

这是它应该是什么样子

select * from (
select ..
union
select...
) as x  -- you need alias here

你做错了是

select ... from
(
select ...
) as t1
union 
select ... -- then this prompted an error because the derived table just ended at the ')', anything after the 't1' is irrelevant
相关问题