I'm running into a problem that I cannot figure out for some reason. I am trying to write a query that joins two tables, in which a match may not be found in a table. Such as:
SELECT
Table1.IDField, Table2.IDField
FROM
Table1
LEFT OUTER JOIN
Table2 ON Table1.PersonID = Table2.PersonID
WHERE
(Table1.IDField = '12345')
AND (Table2.Category = 'Foo')
If there is no match in Table2
, it's not returning anything. However, I need it to just return a NULL for that column if there is no match and still return the value from Table1
.
I have changed up the JOIN
with everything that I can think of, but to no avail.
Table2.Category
can contain multiple other values, so doing a OR IS NULL
type of deal won't work.
So, if there is no match for Table2.Category = 'Foo'
, I am still needing it to return:
Table1 | Table2
----------------
12345 | NULL
Any suggestions?
Move the condition for table2
out of your WHERE
clause and into your JOIN
.
SELECT
Table1.IDField, Table2.IDField
FROM
Table1
LEFT OUTER JOIN Table2
ON Table1.PersonID = Table2.PersonID
AND Table2.Category = 'Foo'
WHERE
Table1.IDField = '12345'
Try this:
LEFT OUTER JOIN
Table2 ON Table1.PesonID = Table2.PersonID
AND Table2.Category = 'Foo'
then delete the 'Foo' line from the WHERE clause
The problem isn't in the join per se, but in the requirement in the where clause that match table2. I've solved this with a where coalese(table2.category, 'Foo') = 'Foo'. That way if the table2 is null, it will still match.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.