Задать вопрос

MySQL запрос из двух таблиц

Есть две таблицы:
games (id, name, image) таблица с играми
uploaded_games (id, user_id, game_id) таблица с играми, которые загрузил пользователь с user_id

Нужно выбрать из таблицы games только те игры, которых нет в таблице uploaded_games.

Делал так:
SELECT * FROM games
LEFT JOIN uploaded_games
ON games.id != uploaded_games.game_id AND uploaded_games.user_id != 1

Запрос не работает (пустой запрос), пните в нужную сторону, пожалуйста.
  • Вопрос задан
  • 41116 просмотров
Подписаться 24 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
seriyPS
@seriyPS
Надеюсь эту картинку вы знаете?



Допустим, таблица A это SELECT * FROM games, а таблица B это SELECT * FROM uploaded_games WHERE user_id = ?.

Т.е. вам нужно из таблицы A вычесть таблицу B (в терминах теории множеств). На картинке это левый столбец, второй сверху.

SELECT *
FROM games as A
LEFT JOIN uploaded_games as B ON (A.game_id = B.game_id)
WHERE B.game_id is NULL AND B.user_id = ?


Можно записать более наглядно, но, скорее всего, MySQL его не соптимизирует эффективно

SELECT *
FROM games
WHERE game_id NOT IN (
  SELECT game_id FROM uploaded_games WHERE user_id = ?
)
Ответ написан
Комментировать
@bizon
SELECT * FROM games
LEFT OUTER JOIN uploaded_games
ON games.id = uploaded_games.game_id where uploaded_games.id is null
Ответ написан
@sumjohn
SELECT * FROM games WHERE id NOT IN (SELECT game_id FROM uploaded_games WHERE 1)
Ответ написан
@theaspin
Не совсем корректный вопрос, при чем тут user_id, если требуется выбрать из таблицы games только те игры, которых нет в таблице uploaded_games?

SELECT * FROM games g LEFT JOIN uploaded_games ug ON g.id=ug.game_id WHERE ug.game_id IS NULL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы