2012-11-22 2 views
0

У меня есть два запроса ниже, которые, я уверен, могут быть объединены в один, но я не уверен, как это сделать.Смысл запроса/подзапроса MYSQL

Я хочу получить столбцы first_name и email для каждого пользователя, но я также хочу получить связанный pet_type и pet_breed от первой записи объявления, если она есть. Запись рекламы содержит только файл breed_id, который затем привязан к таблице pet_breeds, чтобы получить pet_type и pet_breed. Мне не нужно возвращать breed_id в результатах, только pet_type и pet_breed. Если для пользователя не существует связанной записи рекламы, я хочу, чтобы pet_breed и pet_type вернули текст «Нет».

SELECT users.first_name, users.email, 
     (SELECT adverts.breed_id AS breed 
     FROM adverts 
     WHERE adverts.user_id = users.user_id 
     LIMIT 1) 
FROM users 

Второй запрос

SELECT pet_type, pet_breed 
FROM pet_breeds 
WHERE breed_id = breed 

ответ

1

использование LEFT JOIN и COALESCE (, чтобы показать NONE вместо NULL)

SELECT a.first_name, a.email, 
     COALESCE(c.pet_type, 'NONE') pet_type, 
     COALESCE(c.pet_breed, 'NONE') pet_breed 
FROM users a 
     LEFT JOIN adverts b 
      ON a.user_ID = b.user_ID 
     LEFT JOIN pet_breeds c 
      ON b.breed_ID = c.breed_ID 

ОБНОВЛЕНИЕ 1

+0

Привет, Куя, спасибо, что похоже на работу, кроме I – user1052096

+0

.. кроме того, что он возвращает несколько записей, где существует более одной рекламы. Я только хотел, чтобы он возвращал одну запись для каждого пользователя. – user1052096

+0

@ user1052096, так что вы имеете в виду любую из записей, которые должны быть показаны, пока вы должны показывать по крайней мере 1 pettype и petbreed? –

Смежные вопросы