我正在使用 Teradata SQL 并撰寫了以下查詢(注意 LEFT JOIN)
SELECT
key1,
secondvalue,
count(DISTINCT firstvalue)
FROM
(
SELECT
t1.val AS firstvalue,
t1.key1,
t2.val AS secondvalue
FROM table1 t1
LEFT JOIN table2 t2 ON t1.key1 = t1.key1 AND t1.key2 = t2.key2 AND t1.key3 = t2.key3
) AS Testcase
GROUP BY 1, 2
t1.key2 和 t1.key3(左側表格)的一些條目為 NULL。在這種情況下,結果中沒有顯示行,為什么?是 Teradata 特定的,我希望 LEFT JOIN 顯示具有 NULL 值的行。
例如,如果我選擇將 LEFT JOIN 陳述句減少到
SELECT
key1,
secondvalue,
count(DISTINCT firstvalue)
FROM
(
SELECT
t1.val AS firstvalue,
t1.key1,
t2.val AS secondvalue
FROM table1 t1
LEFT JOIN table2 t2 ON t1.key1 = t1.key1
) AS Testcase
GROUP BY 1, 2
出現了更多不同的 key1 值,這不應該是這種情況,對吧?我想查看 key1 的所有不同值,即使 key2 和 key3 為 NULL。如果沒有,我想查看第二個表中的具體值。
我真的不想先將 NULL 值映射到另一個值。
uj5u.com熱心網友回復:
t1.key2 和 t1.key3(左側表格)的一些條目為 NULL。在這種情況下,結果中沒有顯示行,為什么?
可能是因為group by并且distinct會將所有空值組合在一起。誠然,在 SQL 中,null并不一定等于null,但我相信從不同和分組的角度來看,nulls被認為是相同的。
我希望 LEFT JOIN 顯示具有 NULL 值的行。
我從未嘗試過左外連接,其中 null 位于左側。我不能說連接是否會為這樣的行發出結果,但我可以告訴你它不會匹配 equi-join 因為null不等于null. 您是否正在尋找完整的外部聯接?
LEFT JOIN table2 t2 ON t1.key1 = t1.key1
該謂詞將匹配 where 的每一行t1.key1 is not null,這幾乎是笛卡爾積。這就是為什么您的計數要大得多的原因。
我想你想要
LEFT JOIN table2 t2 ON t1.key1 = t2.key1
我想查看 key1 的所有不同值,即使 key2 和 key3 為 NULL
總的來說,我認為你想要的是
LEFT JOIN table2 t2 ON t1.key1 = t2.key1 AND coalesce(t1.key2, -1) = coalesce(t2.key2, -1) AND coalesce(t1.key3, -1) = coalesce(t2.key3, -1)
你想要的第二個引數coalesce是什么型別的語法有效值key2和key3有,但是是一個值,是不是在你的它的使用(否則,我們會加入,我們有行有效的-1一方和null另一方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374317.html
