我在 Teradata SQL 中有兩個表,如下所示:
表1:
| ID |
|---|
| 10 |
| 11 |
| 12 |
表2:
| ID |
|---|
| 10 |
| 13 |
| 14 |
| 15 |
基于上面的兩個表,我需要創建一個如下所示的表。所以:
- col: tab1 --> 如果 ID 在表 1 中,則給它們 1 和 0,否則。
- col: tab2 --> 如果 ID 在表 2 中,則給它們 1 和 0,否則。
想要的結果:
| ID | 選項卡1 | 選項卡2 |
|---|---|---|
| 10 | 1 | 1 |
| 11 | 1 | 0 |
| 12 | 1 | 0 |
| 13 | 0 | 1 |
| 14 | 0 | 1 |
| 15 | 0 | 1 |
我怎樣才能在 Teradata SQL 中做到這一點?
uj5u.com熱心網友回復:
Teradata 似乎本身就支持足夠的 ISO SQL-2003,因此不需要 Teradata 特定的 SQL 擴展或專有功能(即完全相同的查詢將在 MSSQL Server、Oracle、MariaDB 等中作業)。
您需要一個UNIONoftable1和table2的值,然后再加入,這很簡單:
WITH distinctIdValues AS (
SELECT id FROM table1
UNION
SELECT id FROM table2
)
SELECT
dv.id,
CASE WHEN t1.id IS NOT NULL THEN 1 ELSE 0 END AS tab1,
CASE WHEN t2.id IS NOT NULL THEN 1 ELSE 0 END AS tab2
FROM
distinctIdValues AS dv
LEFT OUTER JOIN table1 AS t1 ON dv.id = t1.id
LEFT OUTER JOIN table2 AS t2 ON dv.id = t2.id
然后,您可以將此查詢用作 aVIEW或將其具體化為 new TABLE:
CREATE VIEW foobar AS /* same SQL as above */;
SELECT * FROM foobar;
Teradata 的檔案不清楚如何/是否可以將CTE與INSERT陳述句一起使用,因此我將使用內部查詢:
CREATE TABLE foobar (
id int NOT NULL PRIMARY KEY,
tab1 byteint NOT NULL,
tab2 byteint NOT NULL
);
INSERT INTO foobar ( id, tab1, tab2 )
SELECT
dv.id,
CASE WHEN t1.id IS NOT NULL THEN 1 ELSE 0 END AS tab1,
CASE WHEN t2.id IS NOT NULL THEN 1 ELSE 0 END AS tab2
FROM
(
SELECT id FROM table1
UNION
SELECT id FROM table2
)
AS dv
LEFT OUTER JOIN table1 AS t1 ON dv.id = t1.id
LEFT OUTER JOIN table2 AS t2 ON dv.id = t2.id
ORDER BY
dv.id
;
或者只是這個:
給@dnoeth 的提示,提醒我它可以簡化為:
SELECT
COALESCE( t1.id, t2.id ) AS id,
CASE WHEN t1.id IS NULL THEN 0 ELSE 1 END AS tab1,
CASE WHEN t2.id IS NULL THEN 0 ELSE 1 END AS tab2
FROM
table1 AS t1
FULL OUTER JOIN table2 AS t2 ON t1.id = t2.id
ORDER BY
COALESCE( t1.id, t2.id )
uj5u.com熱心網友回復:
你只需要一個完整的外部連接:
SELECT
Coalesce(t1.id, t2.id) AS id
,CASE WHEN t1.id IS NULL THEN 0 ELSE 1 END AS tab1
,CASE WHEN t2.id IS NULL THEN 0 ELSE 1 END AS tab2
FROM table1 AS t1
FULL JOIN table2 AS t2
ON t1.id = t1.id
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366520.html
標籤:sql 数据 teradata-sql-助手
上一篇:獲取SQL中列的每個唯一對組合
