Я не думаю, что есть какой-либо прямой путь, но вы можете использовать information_schema.key_column_usage
для создания запросов для вас.
SELECT
concat('select \'',TABLE_NAME,
'\' as `in_table`, IF (',COLUMN_NAME,' IS NOT NULL, \'Present\', \'Absent\') as exist from ',
TABLE_NAME, ' where ', COLUMN_NAME, ' = 2; ') as `query`
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = 'testdb' AND
REFERENCED_TABLE_NAME = 'users';
Теперь у вас есть запрос выше, который будет возвращать запросы для каждой таблицы для user-id = 2
. Вы можете создать процедуру, которая будет принимать идентификатор пользователя в качестве аргумента и затем выполнять вышеуказанный запрос.
Перебирать результат примерно так:
select 'employees' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from employees where user_id = 2;
select 'profile_documents' as `in_table`, IF (user_id IS NOT NULL, 'Present', 'Absent') as exist from profile_documents where user_id = 2;
и выполнять их один за другим.
Затем используйте процедуру, чтобы вернуть имена таблиц, в которых присутствует информация о пользователе.