mysql - Mysql 子查询别名与存在和联合所有
问题描述
我有一个这样的查询:
SELECT '__HEADER__' as col1, 'HEADER MESSAGE' as col2
WHERE EXISTS (SELECT col1, col2,
FROM table1) long_long_query
UNION ALL
long_long_query
但似乎不喜欢别名。显然,我只想在结果存在时才使用标题,而不是复制/粘贴长长的查询两次。是否可以?
解决方案
您不能使用别名来引用与 . 一起使用的子查询EXISTS
。
如果要避免两次编写查询,可以使用 MySQL 8.x 中的 Common Table Expression:
WITH long_long_query AS (
SELECT col1, col2
FROM table1
)
SELECT SELECT '__HEADER__' as col1, 'HEADER MESSAGE' as col2
FROM DUAL
WHERE EXISTS (SELECT * FROM long_long_query)
UNION
SELECT * FROM long_long_query;
在 8.x 之前,您可以定义视图。
CREATE VIEW long_long_query AS
SELECT col1, col2
FROM table1;
SELECT SELECT '__HEADER__' as col1, 'HEADER MESSAGE' as col2
FROM DUAL
WHERE EXISTS (SELECT * FROM long_long_query)
UNION
SELECT * FROM long_long_query;
推荐阅读
- javascript - 这个内部反应类组件的工作方式不同
- android - 如何在列表视图内的单元格中执行动态数量的对象?
- spring - 禁用某些作业的自动装配
- algorithm - 如何根据变量将 1 个集合平衡到多个其他集合?
- java - 为什么我无法将以下字符串作为输入并将其添加到 ArrayList?
- asp.net - 无法将日期转换为正确的格式
- android - Android 双向数据绑定 Float 到 EditText
- javascript - 异步函数不等待
- database - 将 ?input 映射作为 Datomic 查询参数传递
- python - 使用python的Windows多显示器设置脚本