MySQL 视图:联合查询失败

Posted

技术标签:

【中文标题】MySQL 视图:联合查询失败【英文标题】:MySQL View: Union Query Fails 【发布时间】:2017-11-16 03:01:32 【问题描述】:

我正在尝试基于以下查询创建一个视图,该查询可以正常工作:

SELECT x_doc_status.Status, sort_order FROM x_doc_status WHERE sort_order IS NOT NULL
UNION  
SELECT "[All]", -2 
UNION  
SELECT "[Open/App] (Trk/Pnd/App)", -1 
UNION 
SELECT "[Open] (Tracking & Pending)", 0
ORDER BY sort_order, STATUS;

但是当我尝试从中创建视图时它失败了。任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

对文字使用单引号

SELECT
      x_doc_status.Status
    , sort_order
FROM x_doc_status
WHERE sort_order IS NOT NULL
UNION
SELECT
      '[All]'
    , -2
UNION
SELECT
      '[Open/App] (Trk/Pnd/App)'
    , -1
UNION
SELECT
      '[Open] (Tracking & Pending)'
    , 0
ORDER BY
      sort_order
    , STATUS
;

我建议您也使用UNION ALL 而不仅仅是UNION。前者更快,因为它不会尝试删除重复的行。

【讨论】:

谢谢,但没关系,不断收到错误“您的 SQL 语法有错误”。尝试了一个较短的版本,只有一个联合,仍然失败:DELIMITER $$ ALTER ALGORITHM=UNDEFINED DEFINER=root@localhost SQL SECURITY DEFINER VIEW form_report_cbodocstatus AS ( SELECT x_doc_status.Status AS Status , x_doc_status.sort_order AS sort_order FROM x_doc_status WHERE x_doc_status.sort_order IS NOT NULL UNION ALL SELECT '[All]' AS Status, -2 AS sort_order )$$ DELIMITER ; 我能告诉你什么?测试它:piliapp.com/mysql-syntax-check 看看它的想法

以上是关于MySQL 视图:联合查询失败的主要内容,如果未能解决你的问题,请参考以下文章

联合分组子查询视图事务python操作mysql索引

MySQL线上偶然联合索引查询失败,导致全表扫描,正常查询索引都命中了

带有联合错误的 MySQL 视图 - “视图的 SELECT 包含 FROM 子句中的子查询”

运行时预定义视图与查询 - mysql

mysql 三表联合查询

mysql 多表联合查询啥用