【问题标题】:How do I create a table for a SQL Union in Teradata?如何在 Teradata 中为 SQL 联合创建表?
【发布时间】:2019-05-02 04:44:14
【问题描述】:

我想将两个表合并在一起,以生成患者 ID 的主列表。

  1. 我的问题是这些数据存储在哪里?

  2. 我想对联合的结果进行左连接。有没有办法将这些结果移到表格中?

    SELECT patid FROM sandbox_jp.claims_women_dx_preg2
    UNION
    SELECT patid FROM sandbox_jp.claims_women_px_preg2;
    

【问题讨论】:

  • 您使用哪个数据库?标签“sql”并没有告诉我们足够多的信息,因为每个 dbms 供应商的语法略有不同。
  • 你可以把它放在一个内部查询中并将它用作一个(虚拟)表,如果你只需要一个 JOIN 就可以了。

标签: mysql union teradata


【解决方案1】:

对于 MySQL,例如

CREATE TABLE new_tbl 
SELECT patid FROM db1.claims_women_dx_preg2 
UNION 
SELECT patid FROM sandbox_jp.claims_women_px_preg2
;

但其他数据库的语法不同,例如SQL 服务器:

CREATE patid
into new_tbl 
from (
    SELECT patid FROM [dbo].claims_women_dx_preg2 
    UNION 
    SELECT patid FROM [sandbox_jp].claims_women_px_preg2
    ) u
;

请注意,我假设您正在联合的 2 个表在某种程度上是不同的,在该联合查询中使用同一个表没有意义。

如果只在有限的时间内需要,并且你的数据库支持“with”那么

with cte as (
        SELECT patid FROM [dbo].claims_women_dx_preg2 
        UNION 
        SELECT patid FROM [sandbox_jp].claims_women_px_preg2
)
select
*
from cte

【讨论】:

  • 感谢您的回复。为了澄清我正在使用 Teradata。
【解决方案2】:

@User_By_Already 答案中的 CTE 逻辑也适用于 Teradata。

你也可以把结果放到一个易变的表中:

CREATE VOLATILE TABLE VT as (
SELECT patid FROM sandbox_jp.claims_women_dx_preg2
UNION
SELECT patid FROM sandbox_jp.claims_women_px_preg2)
with data
primary index(patid)
on commit preserve rows;

然后,您可以从该易失性表中进行选择,加入您的其他表。

或者,您可以使用派生表,再次加入其他表。

select
...
from
(SELECT patid FROM sandbox_jp.claims_women_dx_preg2
UNION
SELECT patid FROM sandbox_jp.claims_women_px_preg2) p
join <other table> on ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2019-01-29
    • 2019-03-13
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多