Oracle

如果沒有相等匹配,則獲取所有行並將列值留空

  • May 4, 2021

我有一個查詢,我想獲取 x 列中的值在 400-600 之間的所有行。包括在這個我想要一個來自另一個表的匹配列值。

但我希望所有 200 行介於 400 和 600 之間,無論第二個表列中的值是否存在於第一個表中的相應列值。

甲骨文SQL:

SELECT h.*, k.customer_id
FROM EVENTS h, CUSTOMERS k
WHERE k.id = h.ident
AND h.eventid BETWEEN 400 AND 600 ORDER BY h.eventid;

這將結果限制在k.id = h.ident正確的地方。但是在 false 上,我也只想要一個空值,以便獲得所有 200 行。

falseTL;DR - 如果 Equal to is ( a.b=c.d),而不是過濾掉該行,我該如何預設為一個值?

無論第二個表列中的值是否存在,我都想要 400 到 600 之間的所有 200 行

所以給定兩個連接表,“左”和“右”,如果它們碰巧在那裡,你想包括“左”表中的每一行和“右”表中的匹配行嗎?

這叫左

$$ Outer $$加入。 您必須使用顯式連接語法,而不是您目前擁有的“逗號”形式,因為它總是執行“內部”連接,需要兩個表中的匹配值。

嘗試這樣的事情:

SELECT 
 h.*                   <-- Personally, I'd avoid this and state every column name explicitly
, k.customer_id
FROM events h 
LEFT JOIN customers k
    ON h.ident = k.id 
WHERE h.eventid BETWEEN 400 and 600
ORDER BY h.eventid 
;

引用自:https://dba.stackexchange.com/questions/290958