According to this SQL join cheat-sheet, a left outer join on one column is the following :
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
WHERE b.foo IS NULL
I'm wondering what it would look like with a join on multiple columns, should it be an OR
or an AND
in the WHERE
clause ?
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
OR b.bar IS NULL
OR b.ter IS NULL
or
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
AND b.bar IS NULL
AND b.ter IS NULL
?
(I don't think it does, but in case it matters, the db engine is Vertica's)
(I'm betting on the OR
one)
If you'd like to get data stored in tables joined by a compound key that's a primary key in one table and a foreign key in another table, simply use a join condition on multiple columns. In one joined table (in our example, enrollment ), we have a primary key built from two columns ( student_id and course_code ).
Yes, indeed! You can use multiple LEFT JOINs in one query if needed for your analysis.
Left Join: SyntaxSELECT * FROM table1 LEFT [ OUTER ] JOIN table2 ON table1. column_name=table2. column_name; SQL LEFT join fetches a complete set of records from table1, with the matching records (depending on the availability) in table2.
That depends on whether the columns are nullable, but assuming they are not, checking any of them will do:
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL -- this could also be bar or ter
This is because after a successful join, all three columns will have a non-null value.
If some of these columns were nullable and you'd like to check if any one of them had a value after the join, then your first (OR
) approach would be OK.
You can use any combination of criteria for joining:
SELECT *
FROM a
LEFT JOIN b ON a.foo = b.foo AND a.bar = b.bar AND a.ter = b.ter
The WHERE
clause has nothing to do with the join itself.
The WHERE b.foo IS NULL
in first query will return all records from a
that had no matching records in b
or when b.foo
was null
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With