sql - 哪些数据库支持 UNION JOIN?
问题描述
首先,这个项目对我来说就像一个好奇心。
我正在为实用程序库编写一些代码,并添加方法来运行不同类型的 SQL 连接语句。一切都很好,但在某些时候,我遇到UNION JOIN
了 SQL-92 规范(第 179 页)中包含的晦涩条款。
我不知道它有多有用(我从未使用过它)并且它仅在 HyperSQL 中实现(AFAIK)。
为了记录,这是它的工作原理。如果我们有两个表 T 和 U 具有任意数量的列/行:
====== T ===== === U ===
a b c d e
---- ---- ---- ---- ----
1 2 3 10 11
4 5 6 12 13
然后:
select * from T union join U
产生(没有特定的行顺序):
a b c d e
---- ---- ---- ---- ----
1 2 3 null null
4 5 6 null null
null null null 10 11
null null null 12 13
无论如何,我想知道哪些数据库确实支持它,或者你是否在野外看到过它。
我也在考虑问它有什么好处,但我不希望这个问题被关闭为“主要基于意见”。
解决方案
理论上,任何SQL 都支持它
正如Moiseenko 在“SQL 问题和解决方案”中所述:
这种连接类型在 SQL-92 语言标准中已经引入,但在以后的 SQL 标准版本中消失了。特别是 SQL2003(ANSI 和 ISO)中没有它。与SQL的许多其他结构一样,UNION JOIN是多余的,因为它可以表示为全外连接和内连接的减法。形式上,我们可以将这个表达式写成如下:
A UNION JOIN B :=
(A FULL JOIN B)
EXCEPT
(A INNER JOIN B)
如果 DBMS 不支持 FULL JOIN(MySQL),可以通过左右外连接的 union 获得。所以我们的公式采用以下形式
A UNION JOIN B :=
((A LEFT JOIN B)
UNION
(A RIGHT JOIN B))
EXCEPT
(A INNER JOIN B)
实际上,SAS 至少支持 9.3 版。参考: http: //support.sas.com/documentation/cdl/en/sqlproc/63043/HTML/default/viewer.htm#p0o4a5ac71mcchn1kc1zhxdnm139.htm
推荐阅读
- javascript - 无法将值发送到前端
- python - 如何使错误“变量”未定义工作?
- javascript - 使用主题的 Rxjs 在反应文本输入组件上去抖动不会在无状态/功能组件上批量输入文本
- java - 如何更正在 do-while 循环中创建的变量的范围?
- laravel - 在 laravel 中缩短指令
- java - Java 应用程序一次最多可以打开多少个文件?
- kubernetes - 升级 Kubernetes 集群前要做的事情
- javascript - 下载带有数值的制表符?
- java - 我正在尝试从 onOptionsItemSelected 方法打开一个片段
- javascript - 如果其他条件反应地图功能