Используя MySQL 5.x, я хочу эффективно выбрать все строки из таблицы X, где нет связанной строки в таблице Y, удовлетворяющей некоторому условию, например
Дайте мне все записи в X, где связанный Y с foo = bar НЕ существует
SELECT count(id) FROM X
LEFT OUTER JOIN Y ON y.X_id = X.id AND y.foo = 'bar'
WHERE y....?
Насколько я понимаю, левое внешнее объединение гарантированно создаст строку для каждой строки в левой (первой) таблице - в данном случае X - независимо от того, была ли найдена удовлетворительная строка в объединенной таблице. Затем я хочу выбрать только те строки, в которых не было найдено ни одной строки.
Мне кажется, что y.X_id должен быть NULL, если нет подходящей записи, но этот тест, похоже, не работает. Также y.X_id = 0 или! Y.X_id.
Редактирует : исправлена ошибка транскрипции (ON не AS), на которую указывали несколько ответов. Исправлена грамматическая ошибка.