php - 联合表的语法错误

标签 php mysql

此查询有效...

$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(
));

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

$stm = $pdo->prepare("SELECT *
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
) AS Combined
GROUP BY Taxon");
 $stm->execute(array(
));

但是我没写对。我收到错误消息#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ') AS 组合附近使用的正确语法 按分类单元分组 第 6 行 LIMIT 0, 30'

有人能看出我做错了什么吗?

最佳答案

MySQL 不允许在 View 的 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 A LEFT JOIN B UNION ALL FROM B LEFT JOIN A”。也就是说,两个查询中都有相同的表。

关于php - 联合表的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803925/

相关文章:

MySQL - 如果第一列值相同,则查询按第二列排序

php - 改变div中的数据

php - 在本地服务器上使用 php json_encode 时遇到问题

php - 使用连接从多个表中选择列

mysql - 引用外连接查询

php - 将 mysql 数据分类到单独的 html 表中?

php - 启用缓存会影响动态内容吗?

php - 如何在 Laravel Eloquent 中确定结果的优先级

SQL 检查数据库是否为空(无表)

mysql - Asp.Net MySQL Connector/Net 连接池性能非常低