Сигурен съм, че това вече е разрешено, но за хора с подобен проблем.
Можете също да опитате да направите няколко леви обединявания, за да получите всички данни
SELECT *, IF (users.type = 1, p.name, c.name) AS name FROM users
LEFT JOIN private AS p ON (users.type = 1 AND users.id = p.user_id)
LEFT JOIN company AS c ON (users.type != 1 AND users.id = c.user_id)