[英]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.