i have the following two tables:
Table1
id name
---------
A3 B2
A3 B400
A5 B100
A7 B200
A8 B6
A8 B2
A8 B3
and
I think you can use a query like the following:
SELECT DISTINCT IF(name2 IS NULL, name, ID) AS ID,
IF(name2 IS NULL, name, Company) AS Company,
IF(name2 IS NULL, 'NOT FOUND', 'FOUND') AS Status
FROM (
SELECT DISTINCT
CASE
WHEN t1.id = t2.id THEN t1.id
WHEN t1.name = t2.name THEN t2.id
ELSE t1.id
END AS ID,
CASE
WHEN t1.id = t2.id THEN t2.company
WHEN t1.name = t2.name THEN t2.company
ELSE t1.name
END AS Company,
t1.name,
(SELECT Table2.name
FROM Table2
WHERE Table2.name = t1.name LIMIT 1) AS name2
FROM Table1 AS t1
LEFT JOIN Table2 AS t2 ON (t1.id = t2.id) OR (t1.name = t2.name)) AS t
ORDER BY ID;
The query use a single LEFT JOIN
operation plus a correlated subquery.
Demo here