Let\'s say I have a TABLE a
in which a COLUMN data
is the one to join on for 2 other tables (TABLE b
and TABLE
If data
is guaranteed to be UNIQUE in tables b
and c
We can use outer join to attempt to get matching row from each of the tables, and then use expression in the SELECT list to test whether we got a matching row. For example:
SELECT a.data
, IF(b.data IS NULL,IF(c.data IS NULL,NULL,'c'),'b') AS info_src
, IF(b.data IS NULL,c.info,b.info) AS b_or_c_info
FROM a
LEFT
JOIN b
ON b.data = a.data
LEFT
JOIN c
ON c.data = a.data
If we find a matching row in b
, then b.data
is guaranteed to be non-NULL. We know the value is non-NULL because it satisfied an equality (=
) comparison.
Note that IF
is MySQL specific syntax. A more portable ANSI-standards compliant version
CASE
WHEN b.data IS NULL
THEN c.info
ELSE b.info
END AS b_or_c_info