Должны ли следующие запросы не давать тот же результат? (Баз данных)

0

Предполагая следующую структуру MySQL, почему два следующих запроса дают разные результаты?

games(id) (464 records)
members(id) (1 record, id=351)
gameslists(id,memberid,gameid) -- (2 records, (1,351,1) and (2,351,2))

В результате получается null

SELECT games.* 
FROM games 
INNER JOIN gameslists ON gameslists.gameid = games.id 
WHERE gameslists.memberid <> 351 AND gameslists.id is NULL

Это дает 462 записи, которые я ожидаю.

SELECT games.* 
FROM games
LEFT JOIN gameslists ON gameslists.gameid = games.id AND gameslists.memberid <> 351
WHERE gameslists.id is NULL 
Теги:

2 ответа

3
Лучший ответ

Выражение (gameslists.id is NULL) никогда не может быть истинным в INNER JOIN query (предполагая, что id является первичным ключом). Поэтому первый набор результатов не содержит строк.

С другой стороны, всякий раз, когда предложение ON LEFT JOIN не соответствует, поля gameslists будут NULL для этой конкретной строки. Поэтому ваш второй запрос вернет все games, которые не отображаются в gameslists, если только memberid не является 351.

  • 0
    Спасибо Даниэль !!!
  • 0
    @Mel: Что вызывает ошибку?
Показать ещё 6 комментариев
2

INNER JOIN возвращает не NULL-совпадения, тогда как LEFT JOIN может быть NULL с одной стороны. Я думаю, что это ключ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню