我在下面有两个问题,我确信可以合并到一个,但我不确定如何。
我想为每个用户获取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
答案 0 :(得分: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
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
(
SELECT user_ID, max(breed_ID) breed_ID
FROM adverts
GROUP BY user_ID
) b ON a.user_ID = b.user_ID
LEFT JOIN pet_breeds c
ON b.breed_ID = c.breed_ID