Как записать в результирующую таблицу ноль если строка не найдена?

Dimazsever
Дата: 22.12.2012 00:33:37
Приветствую всех. Задача такая. Нужно получить из базы идентификаторы ответов и названия тестов, где id пользователя 123456 и id человека которому он отправил тест 654321. Так как второй человек может еще не пройти один из тестов, отправленных ему, значит в таблице могут не существовать строки с определенным id теста. Не существующие строки мне нужно записать в результирующую таблицу, например как ноль. Вот сам запрос:
SELECT
  `answers`.`answer_id`,
  `answers`.`test_id`,
  `cabinet`.`name_test`,
  (SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281' AND `test_id` = 'test_id') as answer_2
FROM `answers`
  INNER JOIN `cabinet`
WHERE `user_id` = '184918649'
  AND `friend_id` = '353281'
  AND answers.test_id = cabinet.test_id

Результирующая таблица должна быть примерно такой:
answer_id test_id name_test answer_2
010 1 Первый тест 110
011 0 Второй тест NULL
Dimazsever
Дата: 22.12.2012 00:35:13
Dimazsever,
Извиняюсь, где id пользователя 184918649 id второго человека 353281
konst55
Дата: 22.12.2012 19:34:53
Dimazsever,
IFNULL???

SELECT
IFNULL(`answers`.`answer_id`,0),
`answers`.`test_id`,
`cabinet`.`name_test`,
(SELECT IFNULL(`answer_id`,0) FROM `answers` WHERE `user_id` = '353281' AND `test_id` = 'test_id') as answer_2
FROM `answers`
INNER JOIN `cabinet`
WHERE `user_id` = '184918649'
AND `friend_id` = '353281'
AND answers.test_id = cabinet.test_id
Добрый Э - Эх
Дата: 22.12.2012 19:42:15
konst55,

может и ifnull. только твой вариант в плане результата не сильно-то и отличаться от авторского будет... Точнее - совсем отличаться не будет. Ибо попутал ты понятия "пустое значение" и "пустой результат выборки"...
konst55
Дата: 22.12.2012 19:57:38
Добрый Э - Эх,

честно говоря из вопроса не совсем понял где автор хочет 0 получить вместо NULL, поэтому просто привел пример использования, но можно писать и
SELECT
IFNULL(`answers`.`answer_id`,0),
`answers`.`test_id`,
`cabinet`.`name_test`,
IFNULL((SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281' AND `test_id` = 'test_id'),0) as answer_2
FROM `answers`
INNER JOIN `cabinet`
WHERE `user_id` = '184918649'
AND `friend_id` = '353281'
AND answers.test_id = cabinet.test_id
Dimazsever
Дата: 22.12.2012 21:43:13
Видимо не правильно вам задал вопрос. Разобрался сам. Вот, что я хотел:
SELECT `cabinet`.`name_test`, `answers`.`answer_id`, (
SELECT `answer_id` FROM `answers` WHERE `user_id` = '353281' AND `answers`.`test_id` = `cabinet`.`test_id`
) as answer_2 FROM `cabinet` INNER JOIN `answers`
 WHERE `user_id` = '184918649' AND `friend_id` = '353281' AND `answers`.`test_id` = `cabinet`.`test_id`

Вот что выдала результирующая таблица:
Картинка с другого сайта.
Так как второй пользователь прошел только один тест, то бишь второй, в первом тесте записывается значение NULL. Только вот мне кажется, что этот запрос можно записать короче. В принципе для двух пользователей условия одинаковые, кроме friend_id. Условие friend_id=353281 нужно только для первого юзера. Как можно сделать, чтобы не писать 2 раза answers.test_id = cabinet.test_id?
Dimazsever
Дата: 23.12.2012 18:10:29
Сделал так, но мне нужно немножко иначе:
SELECT `cabinet`.`name_test`, `answers`.`answer_id`
 FROM `cabinet` INNER JOIN `answers` ON `answers`.`test_id` = `cabinet`.`test_id`
 WHERE `user_id` = '184918649' AND `friend_id` = '353281' OR `user_id` = '353281'

Сейчас результирующая таблица выглядит так:
Картинка с другого сайта.
Теперь вроде как он больше не обращается к таблице два раза, чтобы найти `answers`.`test_id` = `cabinet`.`test_id`. Обращается только один раз и применяет ко всем пользователям. Но мне нужна таблица такого вида:
Картинка с другого сайта.
Не обращайте внимания, что результаты другие. Просто делал скриншот в разное время. Как можно получить такую таблицу?