Для этого можно использовать оператор JOIN в MySQL, чтобы объединить данные из двух таблиц и выбрать только те записи, которые отсутствуют в одной из них. Например, запрос может выглядеть следующим образом:
```sql
SELECT column1, column2
FROM table1
LEFT JOIN table2 ON table1.column_name = table2.column_name
WHERE table2.column_name IS NULL;
```
Чтобы выбрать комментарии по теме и получить основные данные о пользователе из таблицы `user` или `userCache`, можно сделать запрос с использованием оператора UNION:
```sql
SELECT comment, user_id, username, email
FROM comments
LEFT JOIN user ON comments.user_id = user.user_id
WHERE topic = 'your_topic'
UNION
SELECT comment, user_id, username, email
FROM comments
LEFT JOIN userCache ON comments.user_id = userCache.user_id
WHERE topic = 'your_topic';
```
Чтобы избавиться от `avatarInGamesCache` и получать все данные в `avatarInGames` при выборе данных из `userCache`, можно внести несколько изменений в запрос, например:
```sql
SELECT comments.comment,
IF(userCache.user_id IS NOT NULL, userCache.user_id, user.user_id) AS user_id,
IF(userCache.username, userCache.username, user.username) AS username,
IF(userCache.email, userCache.email, user.email) AS email,
IF(userCache.avatarInGames, userCache.avatarInGames, user.avatarInGames) AS avatarInGames
FROM comments
LEFT JOIN user ON comments.user_id = user.user_id
LEFT JOIN userCache ON comments.user_id = userCache.user_id
WHERE topic = 'your_topic';
```
Этот запрос предполагает использование условных операторов IF для выбора нужных данных из таблиц `user` или `userCache`.