联合表的语法错误

时间:2015-09-27 02:20:05

标签: php mysql

此查询有效......

Origin

但是,我想将它们组合成一个名为“combined”的虚拟表,这样我就可以执行更多操作,包括GROUP BY,就像这样......

$stm = $pdo->prepare("SELECT T1.Taxon, T1.Rank, T2.Taxon, T2.Rank FROM     gz_life_reptiles_new T1
LEFT JOIN gz_life_reptiles_new T2 ON T2.Taxon = T1.Taxon
UNION
SELECT T1.Taxon, T1.Rank, T2.Taxon, T2.Rank FROM gz_life_reptiles_new T1
RIGHT JOIN gz_life_reptiles T2 ON T2.Taxon = T1.Taxon");
 $stm->execute(array(
));

但是,我没有正确写出来。我收到错误消息#1064 - 您的SQL语法出错;检查与您的MySQL服务器版本对应的手册,以便在')AS Combined附近使用正确的语法 GROUP BY Taxon 在第6行限制0,30'

谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:2)

MySQL不允许视图的from子句中的子查询。所以,就这样做:

SELECT T1.Taxon, T1.Rank, T2.Taxon, T2.Rank
FROM  gz_life_reptiles_new T1 LEFT JOIN
      gz_life_reptiles_new T2
      ON T2.Taxon = T1.Taxon
UNION
SELECT T3.Taxon, T3.Rank, T4.Taxon, T4.Rank
FROM gz_life_reptiles_new T3 RIGHT JOIN
     gz_life_reptiles T4
     ON T4.Taxon = T3.Taxon;

distinct可能会执行删除重复项所需的操作。如果没有,那么你就有了挑战。

编辑:

好的,这是另一种方法:

SELECT T1.Taxon, T1.Rank, T2.Taxon, T2.Rank
FROM  gz_life_reptiles_new T1 LEFT JOIN
      gz_life_reptiles_new T2
      ON T2.Taxon = T1.Taxon
UNION ALL
SELECT T3.Taxon, T3.Rank, T4.Taxon, T4.Rank
FROM gz_life_reptiles_new T3 RIGHT JOIN
     gz_life_reptiles T4
     ON T4.Taxon = T3.Taxon
WHERE NOT EXISTS (SELECT 1
                  FROM gz_life_reptiles_new T1
                  WHERE T4.Taxon = T1.Taxon
                 );

顺便说一下,您是否打算让第一个LEFT JOINgz_life_reptiles_new两次?查询的结构通常是近似一个FULL OUTER JOIN,结构是:" FROM LEFT JOIN B UNION ALL from B LEFT JOIN A"。也就是说,两个查询中都有相同的表。