错误1242(21000):子查询返回超过1行

时间:2013-12-18 09:30:11

标签: mysql

我有一张如下表格。

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

请帮帮我

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

 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

相关问题