假設「數量」的列是「非空」列(選擇另外一個檢查null如果這不是這種情況:
(注:加入的「其中日期> =」內嵌視圖從OP的後續請求)
from (
select distinct e.number as e_number, B.name, B.number, b.date, B.aud_date,
B.day, B.location
from tableB B left outer join
(select * from employee where date >= <blah>) e
on e.name=B.name and e.number = e.number
and e.date = B.date and e.day=B.day and e.location=B.location
where e.number is null
) j
insert overwrite into table employee e
select j.name, j.number, j.date, j.aud_date, j.day, j.location
要回答這個問題:「爲什麼是e.number是空的條件有」:左外連接,保證從第一個表中的所有值都包括在結果中,那麼什麼發生在第二個表中沒有值的情況下:在這種情況下,第二個表中的所有列都會報告爲null。
所以在上面,我們正在爲第二個表項丟失的情況精確搜索的情況下 - 因而我們:
- 選擇從表中的兩永不空(又名NOT NULL)列之一。所以:是一個永遠在場的專欄?如果不是,則請選擇另一個
- 指定條件「table1-alias」。「table1-never-null-column」= null。這意味着該記錄實際上不存在於連接條件中 - 因此我們發現只存在於表1中的記錄。
感謝您的幫助......請允許我告訴我爲什麼您要檢查e。數字是NULL? – user3072054
當然,我已經更新了答案,試圖解釋。 – javadba
非常感謝你的清晰解釋..更重要的是,如果我將表員工按日期分區,我不想在LEFT OUTER JOIN期間掃描整個分區。相反,我想根據tableB中的日期只掃描特定的分區(員工表)。是否有可能??? ..我們有一個大的表'n'分區數..如果我掃描通過所有這將需要大量的時間和影響性能.. – user3072054