【问题标题】:ERROR 1242 (21000): Subquery returns more than 1 rowERROR 1242 (21000):子查询返回多于 1 行
【发布时间】:2013-12-19 16:48:22
【问题描述】:

我有一张如下表。

Table Name:activity.
coloumn name:
activity_id,Date,assign_engr,Task_Type, Task_Status
1,2013-12-31,Sachin,Monthly,Scheduled
2.2013-12-23,Mikel,Weekly,Done

我需要如下格式的报告

Date    Monthly Task    Weekly Task Assign Engr Task_Status

我有以下查询:

select b.Date,(select a.Task_Name from activity a where a.Task_Type='Monthly' and a.Date=b.Date) AS Monthly,(select a.Task_Name from activity a where Task_Type='Weekly' and a.Date=b.Date) AS Weekly,b.Task_status from activity b;

它显示在下面的错误。

ERROR 1242 (21000): Subquery returns more than 1 row

请帮帮我

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试这个:

    SELECT Date, 
           CASE 
            WHEN Task_Type='Monthly' THEN Task_Name
           END AS Monthly,
           CASE 
            WHEN Task_Type='Weekly' THEN Task_Name
           END AS Weekly,
           Task_status 
    FROM activity;
    

    在您当前的查询中,您使用了子查询,例如 select a.Task_Name from activity a where a.Task_Type='Monthly' and a.Date=b.Date。从错误看来,子查询返回了多条记录,因为您的表可能有多个记录,其中 task_type 为“每月”。这会产生一个问题,因为数据库在外部 SELECT 语句中只能使用一个值,所以现在它无法确定应该从子查询返回的许多值中使用哪个值。因此会显示错误。

    我使用的方法是删除子查询并改用CASE expression

    【讨论】:

    • 您是否注意到他的问题中没有名为 Task_name 的列。我想我们都错过了:)
    • @AshReva 很好,但我认为该专栏就在那里。 OP可能错过了在问题中提及这一点。由于当前的错误消息,我有这个意见。否则,错误消息可能类似于无效列。
    • 我同意你的观点,因为他首先会得到未知列错误而不是子查询错误
    【解决方案2】:
     select a.Date,Case when a.Task_Type='Monthly' Then a.Task_Name Else '' End as Monthly,
     case when a.Task_Type ='Weekly'Then a.Task_Name Else '' End as Weekly,
     a.Task_Status from activity a
    

    在您的查询中,您不需要对活动表进行自联接。

    这里更新enter link description here

    【讨论】:

    • 感谢您的回复。这几乎可以按照我的要求工作。但有一件事是,如果一天没有每周/每月的活动,我将获得 Null 值。我希望它应该是空白的。 |日期 |月刊 |周刊 |任务状态 | | 2013-10-14 |空 |每周 RCA 追踪器 |预定 |
    • 感谢您的回复。我在某些领域得到空值。是否可以在该字段中保留空白而不是 NULL。
    • @user3114551 是的,可能。在我的答案中查看更新的小提琴和查询。如果您满意,您可以接受答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2022-01-24
    • 2023-01-07
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多