首页 > 解决方案 > MySQL在表连接之间添加结果列

问题描述

我有一个查询,它结合了两个表中的列,如下所示:

SELECT UR.recordId, UR.userName, UN.note
FROM userRecords UR
RIGHT JOIN (
    SELECT UR2.recordId
    FROM userRecords UR2
    WHERE userId = 17
) AS URX USING (recordId)
LEFT JOIN userNotes UN USING(recordId);

这会生成一个结果集,其中“userNotes”表中的每条记录都有一行,它与“userRecords”表中的 recordId 相同,如下所示:

--------------------------------------------------
| recordId | userName | note                     |
--------------------------------------------------
| 17       | Rob S    | apples                   |
| 17       | Rob S    | oranges                  |
| 17       | Rob S    | grapes                   |
--------------------------------------------------

这是所需的输出。但是,我现在想在 userName 和 note 列之间添加一个名为“hasPhotos”的列,这将指示“userPhotos”表中是否有任何记录也具有相同的 recordId (17)。

'userPhotos' 表可以包含 0 到 N 条具有匹配 recordId 的记录,就像 userNotes 表一样。但是,如果没有匹配的记录,我希望“hasPhotos”列简单地表示“false”,如果有 1 个或多个匹配项,则表示“true”。我也不希望结果集中的行数根据“userPhotos”表中的记录数增加。总行数仍应与“userNotes”表中的记录数相匹配。

因此,如果没有匹配的照片记录,它应该如下所示:

--------------------------------------------------
| recordId | userName | hasPhotos | note         |
--------------------------------------------------
| 17       | Rob S    | false     | apples       |
| 17       | Rob S    | false     | oranges      |
| 17       | Rob S    | false     | grapes       |
--------------------------------------------------

如果有 1 个或多个匹配的照片记录,它应该如下所示:

--------------------------------------------------
| recordId | userName | hasPhotos | note         |
--------------------------------------------------
| 17       | Rob S    | true     | apples        |
| 17       | Rob S    | true     | oranges       |
| 17       | Rob S    | true     | grapes        |
--------------------------------------------------

谁能帮助我如何调整我的查询来完成这个?我尝试了各种方法,但得到了不希望的结果,例如根据匹配的照片记录增加行数......

提前致谢!

标签: mysql

解决方案


下面是查询 -

SELECT UR.recordId, UR.userName, case when UP.recordId is null then false else true , UN.note
FROM userRecords UR
RIGHT JOIN (
    SELECT UR2.recordId
    FROM userRecords UR2
    WHERE userId = 17
) AS URX USING (recordId)
LEFT JOIN userNotes UN USING(recordId)
left join (select distinct recordId from userPhotos) UP on UR.recordId=UP.recordId

推荐阅读