ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL CASE语句中的相关子查询

2019-06-24 23:02:16  阅读:316  来源: 互联网

标签:mysql sql case correlated-subquery


这是对我要完成的事情的简要说明;我的查询如下.

有4个表和1个视图与这个特定查询相关(遗憾的是,这些名称看起来很混乱,但它们遵循严格的约定,如果您看到完整列表,这将是有意义的):

演出可能有许多演员,这些关联存储在PPerformer中.粉丝可以拥有收藏夹,这些收藏夹存储在Favorite_Performer中. _UpcomingPerformances视图包含显示即将进行的演出的用户友好列表所需的所有信息.

我的目标是从_UpcomingPerformances中选择所有数据,然后包含一个额外的列,指定给定的Performance是否具有Fan添加为其最喜欢的Performer.这包括选择与Performance相关联的Performers列表,以及在Fan的Favorite_Performer中的Performers列表,并与两个数组相交以确定是否有任何共同点.

当我执行以下查询时,我在’where子句’中收到错误#1054 – 未知列’up.pID’.我怀疑这与滥用Correlated Subqueries有关,但据我所知,我在做什么应该工作.当我用硬编码的数字替换up.pID(在t2的WHERE子句中)时,它可以工作,是的,pID是_UpcomingPerformances的现有列.

感谢您的任何帮助,您可以提供.

SELECT
    up.*,
    CASE
        WHEN EXISTS (
            SELECT * FROM (
                SELECT RID FROM Favorite_Performer
                WHERE FanID = 107
            ) t1
            INNER JOIN
            (
                SELECT r.ID as RID
                FROM PPerformer pr
                JOIN Performer r ON r.ID = pr.Performer_ID
                WHERE pr.Performance_ID = up.pID
            ) t2
            ON t1.RID = t2.RID
        )
        THEN "yes"
        ELSE "no"
    END as pText
FROM
    _UpcomingPerformances up

解决方法:

问题与范围有关.嵌套的Selects使得up表在内部select中不可见.试试这个:

SELECT
    up.*,
    CASE
        WHEN EXISTS (
            SELECT * 
            FROM Favorite_Performer fp
              JOIN Performer r  ON fp.RID = r.ID
              JOIN PPerformer pr  ON r.ID = pr.Performer_ID 
            WHERE fp.FanID = 107
              AND pr.Performance_ID = up.pID
        )
        THEN 'yes'
        ELSE 'no'
    END as pText
FROM
    _UpcomingPerformances up

标签:mysql,sql,case,correlated-subquery
来源: https://codeday.me/bug/20190624/1282580.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有