FROM子句中的子查询不起作用

时间:2017-08-06 13:49:44

标签: mysql sql

使用MySQL 5.7.14时,以下查询在使用版本5.6.17时不起作用:

SELECT prep.Mbr_Id AS Mbr, 
       prep.Pra_Id AS Pra, 
       SUM( prep.MPra_VAL ) AS Val 
FROM    
    (
      SELECT membres.Mbr_Id AS Mbr_Id, 
             pratiques.Pra_Id AS Pra_Id, 
             0 AS MPra_VAL 
      FROM membres 
      JOIN pratiques 
      WHERE pratiques.Pra_Index = 1 
              UNION ALL 
      SELECT membres_pratiques.MPra_Mbr_Id AS Mbr_Id, 
             membres_pratiques.MPra_Pra_Id AS Pra_Id, 
             membres_pratiques.MPra_Val AS MPra_VAL 
      FROM membres_pratiques 
    ) AS prep
GROUP BY prep.Mbr_Id, 
         prep.Pra_Id 

在SQL选项卡的phpMyAdmin(5.6.25)中编写此查询,我有以下错误:

. on "(" line, after the first FROM clause : 
    . an expression was expected ( close to ( )
    . unexpected token ( close to ) )
. on SELECT line after the ")" : 
    . this type of clause has already been analysed ( close to ) )

有没有人知道可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

尝试更简单的查询形式:

SELECT m.Mbr_Id, p.Pra_Id, mp.MPra_VAL 
FROM membres m CROSS JOIN
     pratiques p LEFT JOIN
     membres_pratiques mp
     ON mp.MPra_Mbr_Id = m.Mbr_Id AND mp.MPra_Pra_Id = p.Pra_Id
WHERE p.Pra_Index = 1 ;

只有在对#34; membres"成对有多行时才需要聚合。和" pratiques"在membres_pratiques

答案 1 :(得分:0)

SELECT membres.Mbr_Id AS Mbr_Id,pratiques.Pra_Id AS Pra_Id,membres_pratiques.MPra_Val AS MPra_VAL FROM membres full outer join membres_pratiques on (membres.Mbr_Id = membres_pratiques.MPra_Mbr_Id)和 (prep.Pra_Id = membres_pratiques.MPra_Pra_Id)