首页 > 解决方案 > 如何加入可选子表?

问题描述

我想从下表中选择数据。(AWS RDB,无服务器 Aurora MySQL)

表.1 用户

| id | name    |
|----|---------|
|  1 | Alpha   |
|  2 | Bravo   |
|  3 | Charlie |

* id is PK.

表.2 头像

| id | user_id | image_path |
|----|---------|------------|
|  1 |       1 | 1.jpg      |
|  2 |       2 | 2.jpg      |
|  3 |       1 | 1-2.jpg    |

* id is PK.
* user_id is FK user.id

预计

| user_id | user_name | avatar_id | avatar_image_path |
|---------|-----------|-----------|-------------------|
|       1 | Alpha     |         3 | 1-2.jpg           |
|       2 | Bravo     |         2 | 2.jpg             |
|       3 | Charlie   | NULL      | NULL              |

现在,我写了这个 SQL。

SELECT
  user.id AS user_id,
  user.name AS user_name,
  avatar.id AS avatar_id,
  avatar.image_path AS avatar_image_path
FROM user
LEFT JOIN avatar ON avatar.user_id = user.id
GROUP BY user.id
HAVING MAX(avatar.id);

但是,user_id = 3没有选择行。

输出

| user_id | user_name | avatar_id | avatar_image_path |
|---------|-----------|-----------|-------------------|
|       1 | Alpha     |         3 | 1-2.jpg           |
|       2 | Bravo     |         2 | 2.jpg             |

我应该怎么做?

标签: mysqlsql

解决方案


你可以试试下面的脚本 -

SELECT A.*,C.image_path
FROM user A
LEFT JOIN (
    SELECT  user_id,max(id) id
    FROM  avatar
    GROUP BY user_id
) B ON A.id = B.user_id
LEFT JOIN avatar C ON B.id = C.id

推荐阅读