Oracle
如果沒有相等匹配,則獲取所有行並將列值留空
我有一個查詢,我想獲取 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 行。
false
TL;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 ;