I have a query where I want to fetch all rows where the value in column x is between 400-600. Including in this I want a matching column value from antoher table.
But I want all 200 rows between 400 and 600 regardless of if the value in the second table column exists for the corresponding column value in the first table.
Oracle 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;
This limits the results to where k.id = h.ident
is true. But on false I just want an empty value aswell so that I get all 200 rows.
TL;DR - How can I default to a value if Equal to is false
(a.b=c.d)
, instead of filtering out that row?
SELECT C(h.ident, 0), C(h.eventid, 0), h.*, k.customer_id FROM events h JOIN customers k ON k.id = h.ident ORDER BY C(h.eventid);
whereC()
is theCOALESCE()
function. If this answers your problem, I can write it up as answer. You seem to want something likea.b = c.d OR a.b != c.d
which is all the records match the JOIN! But removing theWHERE
altogether might solve your problem AIUI? Assume k.id != NULL!COALESCE()
for which I am grateful :) But I struggled with the syntax and wasnt able to test it out. Seems like I have found my answer though withLEFT JOIN