MySQL - расширенный запрос, основанный на if null и join - PullRequest
2 голосов
/ 27 декабря 2011

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

SELECT a.id,a.name,
IFNULL(b.imageurl, 'default image url') AS 'imageurl',
IFNULL(b.imagecategory, '34') AS 'imagecategory',
IFNULL(b.imagetype, 't') AS 'imagetype'
FROM summary a
LEFT JOIN images i ON a.id = b.id
WHERE b.imagetype = 'thumbnail' AND b.imagecategory = '99'

Таблица 'a' является основной таблицей и состоит из различной информации об объекте.

Таблица «b» состоит из нескольких URL-адресов изображений для каждого объекта, они фильтруются с использованием «imagetype» и «imagecategory», чтобы соответствовать только одному изображению для каждого объекта.

Объединениедве таблицы работают только в том случае, если таблица 'b' имеет совпадающий идентификатор, тип изображения и категорию изображения.Если нет, то возвращаются только те записи из таблицы «а», в которых они есть, а это не то, что мне нужно.Я хочу, чтобы таблица 'b' возвращала значения по умолчанию, установленные с помощью функции IFNULL, поэтому я получаю полный набор результатов, даже если в этой таблице отсутствуют значения для связанного идентификатора: s.

Как я могу это сделатьэто?

1 Ответ

7 голосов
/ 27 декабря 2011

Попробуйте вместо этого переместить тесты для столбцов в images в предложение объединения.Если в images нет совпадений, у вас в столбцах будет null, и это ничего не будет равносильно.

SELECT a.id,a.name,
IFNULL(b.imageurl, 'default image url') AS 'imageurl',
IFNULL(b.imagecategory, '34') AS 'imagecategory',
IFNULL(b.imagetype, 't') AS 'imagetype'
FROM summary a
LEFT JOIN images b ON a.id = b.id AND
                      b.imagetype = 'thumbnail' AND 
                      b.imagecategory = '99'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...