Практика использования столбца, который ссылается на одну из нескольких возможных таблиц, называется полиморфными ассоциациями . Это хак, который нарушает правила проектирования реляционных баз данных.
SQL не поддерживает условные объединения в разные таблицы в зависимости от значения, которое вы найдете в данной строке. Все таблицы должны быть известны в тот момент, когда база данных анализирует запрос.
Вы можете присоединиться к всем таблицам с внешними объединениями, потому что ровно одна из этих таблиц должна содержать совпадение:
SELECT c.*, COALESCE(u.name, p.name, t.name, s.name) AS name
FROM tbl_comments AS c
LEFT OUTER JOIN tbl_users u ON c.to = u.id AND c.type = 'number'
LEFT OUTER JOIN tbl_persons p ON c.to = p.id AND c.type = 'player'
LEFT OUTER JOIN tbl_teams t ON c.to = t.id AND c.type = 'team'
LEFT OUTER JOIN tbl_sports s ON c.to = s.id AND c.type = 'league';
Или вы можете присоединиться к одной из этих таблиц, но ограничиться строками, которые, как вы знаете, совпадают:
SELECT c.*, u.name
FROM tbl_comments AS c
INNER JOIN tbl_users u ON c.to = u.id
WHERE c.type = 'number'
UNION ALL
SELECT c.*, p.name
FROM tbl_comments AS c
INNER JOIN tbl_persons u ON c.to = p.id
WHERE c.type = 'player'
UNION ALL
SELECT c.*, t.name
FROM tbl_comments AS c
INNER JOIN tbl_teams t ON c.to = t.id
WHERE c.type = 'team'
UNION ALL
SELECT c.*, s.name
FROM tbl_comments AS c
INNER JOIN tbl_sports s ON c.to = s.id
WHERE c.type = 'league'