Подсчитать строки в таблице за исключением строк из правой таблицы?

Рейтинг: 0Ответов: 1Опубликовано: 20.09.2014

Есть запрос:

SELECT COUNT(LogId) as CNT FROM log
            LEFT JOIN subscrubetousers ON subscrubetousers.SubscrubeToUsersType = log.LogType
            RIGHT JOIN userlog ul ON ul.userlogIdLog = log.LogId WHERE subscrubetousers.SubscrubeToUsersIdUser = 7

Нужно подсчитать количество строк в таблице log, ID которых нет в таблице userlog для заданного пользователя. Почему-то RIGHT JOIN не работает так, как планировал.

Можно поступить через LEFT OUTER JOIN:

SELECT * FROM log
            LEFT JOIN subscrubetousers ON subscrubetousers.SubscrubeToUsersType = log.LogType
            LEFT OUTER JOIN userlog ul ON log.LogId = ul.userlogIdLog WHERE ul.userlogIdLog IS NULL AND subscrubetousers.SubscrubeToUsersIdUser = 7

Ответы

▲ 1Принят

Во второй запрос добавь SELECT COUNT(*), и он выведет требуемое кол-во записей.
В WHERE уже есть условие ul.userlogIdLog IS NULL. Это и будет кол-во записей, в log которых нет в userlog.