sql - 如何使用 union all 处理多个 select 语句
问题描述
我必须通过使用 union all 的多个 SQL 语句来获得结果,这就像:
select column1,column2 from table1 where column4 ='value1' union all
select column1,column2 from table1 where column4 ='value2' union all
select column1,column2 from table1 where column4 ='value3' union all
select column1,column2 from table1 where column4 ='value4' union all
select column1,column2 from table1 where column4 ='value5'
对于上面,我只会得到两个结果:
column1 column2
XXXXX XXXXX
XXXXX XXXXX
因为另外 2 个选择查询没有结果。但我需要在结果表中记录空值或没有值,例如:
column1 column2
XXXXX XXXXX
Null Null
XXXXX XXXXX
Null Null
怎么能得到这样的结果??
我是否可以通过在多个 sql 语句中使用 if 语句来处理空值。
解决方案
与其使用 a UNION ALL
,不如使用 CTE 创建值列表,然后使用LEFT JOIN
. 这使您不再需要扫描表 5 次:
WITH VTE AS (
SELECT Column4
FROM (VALUES('value1'),('value2'),('value3'),('value4'),('value5')) V(Column4))
SELECT YT.Column1, YT.Column2, V.Column4
FROM VTE V
LEFT JOIN YourTable YT ON V.Column4 = YT.Column4;
推荐阅读
- javascript - 不变违规:元素类型无效:应为字符串或类/函数
- javascript - 更改此元素的颜色
- sql-server - Apache DBD authn ODBC MSSQL 不工作
- php - json解码合并后
- ckan - docker compose ckan 容器退出并出现错误
- javascript - 当我单击以角度打开弹出窗口的按钮时,它会在我要打开弹出窗口的组件的末尾添加一些额外的空间?
- windows - HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有
- python - 保存和加载由 gensim 相似性模型制作的多个分片
- ruby - Ruby gem 的单个可执行二进制文件
- java - 如何以编程方式在后台运行应用程序?