MySQL在表联接之间添加结果列

MySQL在表联接之间添加结果列,mysql,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); 这将生成一个结果集,其中“u

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

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”表中的记录ID相同,如下所示:

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

“userPhotos”表可以包含0到N条具有匹配记录ID的记录,就像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       |
--------------------------------------------------
--------------------------------------------------
| recordId | userName | hasPhotos | note         |
--------------------------------------------------
| 17       | Rob S    | true     | apples        |
| 17       | Rob S    | true     | oranges       |
| 17       | Rob S    | true     | grapes        |
--------------------------------------------------
如果有1个或多个匹配的照片记录,则应如下所示:

--------------------------------------------------
| recordId | userName | hasPhotos | note         |
--------------------------------------------------
| 17       | Rob S    | false     | apples       |
| 17       | Rob S    | false     | oranges      |
| 17       | Rob S    | false     | grapes       |
--------------------------------------------------
--------------------------------------------------
| recordId | userName | hasPhotos | note         |
--------------------------------------------------
| 17       | Rob S    | true     | apples        |
| 17       | Rob S    | true     | oranges       |
| 17       | Rob S    | true     | grapes        |
--------------------------------------------------
有谁能帮助我调整我的查询以实现这一点?我尝试了各种方法,但得到了不理想的结果,例如根据匹配的照片记录增加行数


提前谢谢

可以将EXISTS条件与相关子查询一起使用

而且,在我看来,在现有查询中不需要RIGH连接

我会:

SELECT 
    UR.recordId, 
    UR.userName, 
    UN.note,
    CASE WHEN EXISTS(
        SELECT 1
        FROM userPhotos UP
        WHERE UP.recordId = UR.recordId
    ) THEN 'true' ELSE 'false' END hasPhotos
FROM userRecords UR
LEFT JOIN userNotes UN USING(recordId)
WHERE UR.userId = 17

下面是问题-

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

我建议为讨论中的表添加示例数据。您只向我们展示了输出,许多人可能会发现很难遵循您的预期逻辑。