Cri*_*ber 5 sql amazon-redshift
我有两个 Redshift 表,它们根据特定日期范围内的 ID 和日期进行连接。
当我尝试对表进行完全外连接(下面的两个替代 SQL 语句)时,出现以下错误:
[Amazon](500310) Invalid operation: FULL JOIN is only supported with merge-joinable join conditions; [SQL State=0A000, DB Errorcode=500310]
Run Code Online (Sandbox Code Playgroud)
它适用于 LEFT-JOIN,但不适用于 FULL-OUTER。我基本上希望其中包含所有 id 和范围,即使其他表中没有匹配项。我该如何解决这个错误?
表格1:
表2:
第一个替代加入:
SELECT *
FROM table1
FULL OUTER JOIN table2
ON (table1.id = ltrim(table2.id, '0') -- id
AND DATE(table1.colx) BETWEEN DATE(table2.col2) AND DATE(table2.col3) -- date range
)
;
Run Code Online (Sandbox Code Playgroud)
第二种替代连接:(根据AWS文档,范围是包含在内的,所以我想这些语句应该有相同的结果)
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.id = ltrim(table2.id, '0') -- id
AND DATE(table1.colx) >= table2.col2 -- date range beginning
AND DATE(table1.colx) <= table2.col3 -- date range ending
;
Run Code Online (Sandbox Code Playgroud)
使用重写可以union all解决问题吗?
SELECT t1.*, t2.*
FROM table1 t1 LEFT JOIN
table2 t2
ON t1.id = ltrim(t2.id, '0') AND
DATE(t1.colx) BETWEEN DATE(t2.col2) AND DATE(t2.col3)
UNION ALL
SELECT t1.*, t2.*
FROM table2 t2 LEFT JOIN
table1 t1
ON t1.id = ltrim(t2.id, '0') AND
DATE(t1.colx) BETWEEN DATE(t2.col2) AND DATE(t2.col3)
WHERE t1.id IS NULL;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |