哪些数据库支持UNION JOIN?

The*_*ler 3 sql database 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
Run Code Online (Sandbox Code Playgroud)

然后:

select * from T union join U  
Run Code Online (Sandbox Code Playgroud)

产生(没有特定的行顺序):

   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
Run Code Online (Sandbox Code Playgroud)

无论如何,我想知道哪些数据库确实支持它,或者您是否曾经在野外看到它。

我当时也在考虑问它有什么好处,但是我不希望这个问题以“基于首要观点”结束。

DVK*_*DVK 5

从理论上讲,任何 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)
Run Code Online (Sandbox Code Playgroud)

如果DBMS不支持FULL JOIN(MySQL),则可以通过左右外部联接的联合来获得它。因此我们的公式采用以下形式

A UNION JOIN B :=
((A LEFT JOIN B)
UNION
(A RIGHT JOIN B))
EXCEPT
(A INNER JOIN B)
Run Code Online (Sandbox Code Playgroud)

实际上,SAS至少支持9.3版。参考:http : //support.sas.com/documentation/cdl/zh-CN/sqlproc/63043/HTML/default/viewer.htm#p0o4a5ac71mcchn1kc1zhxdnm139.htm