MYSQL查询/子查询合并

时间:2012-11-22 14:44:14

标签: mysql sql

我在下面有两个问题,我确信可以合并到一个,但我不确定如何。

我想为每个用户获取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 个答案:

答案 0 :(得分:1)

使用LEFT JOINCOALESCE显示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