此查询有效......
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'
谁能看到我做错了什么?
答案 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 JOIN
在gz_life_reptiles_new
两次?查询的结构通常是近似一个FULL OUTER JOIN,结构是:" FROM LEFT JOIN B UNION ALL from B LEFT JOIN A"。也就是说,两个查询中都有相同的表。