簡體   English   中英

識別多個表 Snowflake SQL 之間的唯一列

[英]Identifying unique columns between multiple table Snowflake SQL

在執行“UNION ALL”時,我必須識別多個表之間的唯一列。

例如:Employee_1、Employee_2、Employee_3

Table1: Employee_1

|Emp_Id|Joined_Mnth|Store_NO | Marked_YR | 
+------+-----------+---------+-----------+
| 1    |March      |100020   | 2018      |
| 2    |April      |120004   | 2018      |
| 3    |January    |100032   | 2019      |
| 4    |October    |231009   | 2019      |

Table2: Employee_2

|Emp_Id|Store_NO | Marked_YR | 
+------+---------+-----------+
| 1    |100020   | 2018      |
| 2    |120004   | 2018      |

Table3: Employee_3

|Emp_Id|Joined_Mnth|Store_NO | Closed_YR | 
+------+-----------+---------+-----------+
| 1    |March      |100020   | 2020      |
| 2    |April      |120004   | 2018      |
| 7    |January    |100032   | 2021      |
| 8    |October    |231009   | 2019      |

視圖中的輸出:

CREATE OR REPLACE VIEW Employee AS
SELECT Emp_Id,Store_NO FROM Employee_1
UNION ALL
SELECT Emp_Id,Store_NO FROM Employee_2
UNION ALL
SELECT Emp_Id,Store_NO FROM Employee_3

|Emp_Id|Store_NO |  ==> Common columns between Employee_1,Employee_2,Employee_3
+------+---------+
| 1    |100020   |
| 2    |120004   |
| 3    |100032   |
| 4    |231009   |
| 1    |100020   |
| 2    |120004   |
| 1    |100020   |
| 2    |120004   |
| 7    |100032   |
| 8    |231009   |

如何識別上述所有表之間的公共列?

您可以使用information_schema.columns

select column_name
from information_schema.columns
where table_name in ('Employee_1', 'Employee_2', 'Employee_3')
group by column_name
having count(*) = 3;

您可以使用INFORMATION_SCHEMA.COLUMNS來獲取列列表:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ILIKE ANY ('Employee_1', 'Employee_2', 'Employee_3')
GROUP BY COLUMN_NAME
HAVING COUNT(*) = 3;

編輯:

可以使用NATURAL FULL JOIN組合多個表(感謝Lukas Eder相關帖子):

CREATE OR REPLACE VIEW Employee AS
SELECT *
FROM (SELECT *, 'Employee_1' AS tab FROM Employee_1) sub1
NATURAL FULL JOIN (SELECT *, 'Employee_2' AS tab FROM Employee_2) sub2
NATURAL FULL JOIN (SELECT *, 'Employee_3' AS tab FROM Employee_3) sub3;

這是一種外部聯合對應的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM