MYSQL 查询/子查询合并

标签 mysql sql

我下面有两个查询,我确信可以将它们合并为一个,但我不确定如何合并。

我想获取每个用户的名字和电子邮件列,但我还想从第一个广告记录中获取关联的 pet_type 和 pet_breed (如果有的话)。广告记录仅包含breed_id,然后将其链接到pet_breeds表以获取pet_type和pet_breed。我不需要在结果中返回breed_id,只需返回pet_type 和pet_breed。如果用户不存在关联的广告记录,那么我希望 pet_breed 和 pet_type 返回文本“None”。

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

最佳答案

使用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

关于MYSQL 查询/子查询合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515091/

相关文章:

SQL:在 Google BigQuery 上查找最接近的纬度/经度记录

mysql - 在 SQL 中排名时, "+"符号是什么意思?

java - 如何将JSP中的 "Drop-down"列表的数据存储到我们的MySql数据库中?

PHP MySQL - 用户输入名称并插入相应的ID

mysql - 用另一个表的另一列的数据更新一列

mysql - 用于导出成员详细信息的 SQL Join

sql - 调用函数时在 "("处或附近出现语法错误

php - 使用 PHP OOP 管理数据库

php - 从mysql db获取数据时如何在html中输入一些内容后转到下一行

mysql - Mysql 中的嵌套查询更新?