sql - 使用带有 unnest 的交叉连接
问题描述
我正在尝试为测试目的创建一些虚拟数据。以下是我的一个查询 -
select *, LEVEL1, LEVEL2 from table
cross join
(select ('SVC1', 'SVC2') AS LEVEL1 ) b
cross join
(select ('SVC3', 'SVC4') AS LEVEL2 ) b
电流输出
id num name type occuSVC2ion location LEVEL1 LEVEL2
1000056 1326120205 CHRISTOPHER H Physical ASHEVILLE, NC (SVC1,SVC2) (SVC3,SVC4)
1030026 1326105 Jennifer Ew F None N/A Meridian, MS (SVC1,SVC2) (SVC3,SVC4)
我希望输出是 -
id num name type occuSVC2ion location LEVEL1 LEVEL2
1000056 1326120205 CHRISTOPHER H Physical ASHEVILLE, NC SVC1 SVC3
1000056 1326120205 CHRISTOPHER H Physical ASHEVILLE, NC SVC1 SVC4
1000056 1326120205 CHRISTOPHER H Physical ASHEVILLE, NC SVC2 SVC3
1000056 1326120205 CHRISTOPHER H Physical ASHEVILLE, NC SVC2 SVC4
1030026 1326105 Jennifer Ew F None N/A Meridian, MS SVC1 SVC3
1030026 1326105 Jennifer Ew F None N/A Meridian, MS SVC1 SVC4
1030026 1326105 Jennifer Ew F None N/A Meridian, MS SVC2 SVC3
1030026 1326105 Jennifer Ew F None N/A Meridian, MS SVC2 SVC4
解决方案
我很困惑。为什么不这样做呢?
select t.*, v.LEVEL1, v.LEVEL2
from table cross join
(values ('SCV1', 'SCV3'),
('SCV1', 'SCV4'),
('SCV2', 'SCV3'),
('SCV2', 'SCV4')
) v(LEVEL1, LEVEL2);
或者,如果你真的有两对以上,你可以使用多个CROSS JOIN
s:
select t.*, v1.LEVEL1, v2.LEVEL2
from table cross join
(values ('SCV1') ('SCV2')
) v1(LEVEL1) cross join
(values ('SCV3'), ('SCV4')
) v2(LEVEL2);
您的代码正在定义具有两列的记录类型(这也称为复合类型)。如文档中所述,这就是括号在这种情况下的作用。
推荐阅读
- html - 滚动条 webkit 属性与
- 标签
- r - 为什么当我尝试制作子集数据框时我得到了很多 NA
- typescript - 当我只知道该对象键的模式时如何定义类型?
- java - 如何在 Java 中使用 XOR 开发一个OTPInputStream
- php - drupal 7中用户超时值的覆盖会话
- ios - Swift 解码错误 - (怀疑:Some Field Sometime Empty)
- python - 如何在 python django 中更新 json 数据(即使用 Id 值)?
- macos - MacOS 上的 Dart VM 嵌入 (libdart_jit.a) 产生“dyld: Symbol not found: __ZN4dart13FLAG_profilerE”
- reactjs - 无法传递 props 值?
- python - QTextBrowser在加载markdown文件时不显示内容