Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取错误1221-UNION和LIMIT的用法不正确_Mysql - Fatal编程技术网

Mysql 获取错误1221-UNION和LIMIT的用法不正确

Mysql 获取错误1221-UNION和LIMIT的用法不正确,mysql,Mysql,我试图使用这两个查询之间的union进行union查询,但得到错误121 union和LIMIT的用法不正确。请帮助我进行此联合查询以获得这两个查询的结果 问题1: SELECT t1.TraineeID, t2.attnDate, MIN(t1.attnTime) AS inTime, (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end)

我试图使用这两个查询之间的union进行union查询,但得到错误121 union和LIMIT的用法不正确。请帮助我进行此联合查询以获得这两个查询的结果

问题1:

SELECT t1.TraineeID,
       t2.attnDate,
       MIN(t1.attnTime) AS inTime,
       (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end) AS outTime,
       (CASE WHEN t5.Slot ='1' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '1')THEN 'P' 
             WHEN t5.Slot ='2' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '2')THEN 'P'
             WHEN t5.Slot ='3' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '3')THEN 'P'
             WHEN t5.Slot ='4' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '4')THEN 'P'
             WHEN t5.Slot ='1' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '1')THEN 'Early Out' 
             WHEN t5.Slot ='2' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '2')THEN 'Early Out'
             WHEN t5.Slot ='3' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '3')THEN 'Early Out'
             WHEN t5.Slot ='4' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '4')THEN 'Early Out'
             ELSE 'Late-In'
       END) AS Status

FROM tbl_attn_temp t1, tbl_assigned t3, tbl_batch t5
JOIN (SELECT DISTINCT attnDate FROM tbl_attn_temp) t2
WHERE t1.attndate = t2.attnDate and t3.BatchID=t5.BatchID AND t1.TraineeID = t3.TraineeID
AND t1.attnDate='2016-01-13'
AND(CASE WHEN t5.Slot ='1' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '1') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '1') 
         WHEN t5.Slot ='2' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '2') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '2')
         WHEN t5.Slot ='3' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '3') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '3')
         WHEN t5.Slot ='4' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '4') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '4')
    END)
GROUP BY t1.TraineeID, t2.attnDate
问题2:

SELECT t1.TraineeID,
       t2.attnDate,
       MIN(t1.attnTime) AS inTime,
              (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end) AS outTime,
       (CASE WHEN t4.Slot ='1' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '1')THEN 'P' 
             WHEN t4.Slot ='2' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '2')THEN 'P'
             WHEN t4.Slot ='3' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '3')THEN 'P'
             WHEN t4.Slot ='4' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '4')THEN 'P'
             WHEN t4.Slot ='1' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '1')THEN 'Early Out' 
             WHEN t4.Slot ='2' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '2')THEN 'Early Out'
             WHEN t4.Slot ='3' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '3')THEN 'Early Out'
             WHEN t4.Slot ='4' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '4')THEN 'Early Out'
             ELSE 'Late-In'
       END) AS Status

FROM tbl_attn_temp t1, tbl_assigned t3, tbl_instructor_info t4
JOIN (SELECT DISTINCT attnDate FROM tbl_attn_temp) t2
WHERE t1.attndate = t2.attnDate AND t1.TraineeID = t4.InstructorID
AND t1.attnDate='2016-01-13'
AND(CASE WHEN t4.Slot ='1' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '1') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '1') 
         WHEN t4.Slot ='2' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '2') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '2')
         WHEN t4.Slot ='3' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '3') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '3')
         WHEN t4.Slot ='4' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '4') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '4')
    END)
GROUP BY t1.TraineeID, t2.attnDate
尝试关键字union all而不是union

尝试:


只需在这些union语句中添加括号。它适合我,例如: 选择限制1 协会 选择限制1 协会 选择限制1


带括号的union all也可以工作。

这是由MySQL 5.7上的更改引起的。要解决此问题,您必须嵌套您的选择,如下所示:

SELECT * FROM(

    SELECT t1.TraineeID,
           t2.attnDate,
           MIN(t1.attnTime) AS inTime,
           (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end) AS outTime,
           (CASE WHEN t5.Slot ='1' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '1')THEN 'P' 
                 WHEN t5.Slot ='2' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '2')THEN 'P'
                 WHEN t5.Slot ='3' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '3')THEN 'P'
                 WHEN t5.Slot ='4' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '4')THEN 'P'
                 WHEN t5.Slot ='1' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '1')THEN 'Early Out' 
                 WHEN t5.Slot ='2' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '2')THEN 'Early Out'
                 WHEN t5.Slot ='3' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '3')THEN 'Early Out'
                 WHEN t5.Slot ='4' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '4')THEN 'Early Out'
                 ELSE 'Late-In'
           END) AS Status

    FROM tbl_attn_temp t1, tbl_assigned t3, tbl_batch t5
    JOIN (SELECT DISTINCT attnDate FROM tbl_attn_temp) t2
    WHERE t1.attndate = t2.attnDate and t3.BatchID=t5.BatchID AND t1.TraineeID = t3.TraineeID
    AND t1.attnDate='2016-01-13'
    AND(CASE WHEN t5.Slot ='1' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '1') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '1') 
             WHEN t5.Slot ='2' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '2') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '2')
             WHEN t5.Slot ='3' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '3') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '3')
             WHEN t5.Slot ='4' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '4') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '4')
        END)
    GROUP BY t1.TraineeID, t2.attnDate
) AS query1
联合


请创建一个SQLFIDLE。两个查询都不使用LIMIT或UNION?请阅读。这里解释了你问题的解决方法。
SELECT * FROM(

    SELECT t1.TraineeID,
           t2.attnDate,
           MIN(t1.attnTime) AS inTime,
           (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end) AS outTime,
           (CASE WHEN t5.Slot ='1' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '1')THEN 'P' 
                 WHEN t5.Slot ='2' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '2')THEN 'P'
                 WHEN t5.Slot ='3' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '3')THEN 'P'
                 WHEN t5.Slot ='4' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '4')THEN 'P'
                 WHEN t5.Slot ='1' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '1')THEN 'Early Out' 
                 WHEN t5.Slot ='2' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '2')THEN 'Early Out'
                 WHEN t5.Slot ='3' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '3')THEN 'Early Out'
                 WHEN t5.Slot ='4' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '4')THEN 'Early Out'
                 ELSE 'Late-In'
           END) AS Status

    FROM tbl_attn_temp t1, tbl_assigned t3, tbl_batch t5
    JOIN (SELECT DISTINCT attnDate FROM tbl_attn_temp) t2
    WHERE t1.attndate = t2.attnDate and t3.BatchID=t5.BatchID AND t1.TraineeID = t3.TraineeID
    AND t1.attnDate='2016-01-13'
    AND(CASE WHEN t5.Slot ='1' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '1') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '1') 
             WHEN t5.Slot ='2' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '2') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '2')
             WHEN t5.Slot ='3' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '3') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '3')
             WHEN t5.Slot ='4' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '4') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '4')
        END)
    GROUP BY t1.TraineeID, t2.attnDate
) AS query1
SELECT * FROM(
SELECT t1.TraineeID,
       t2.attnDate,
       MIN(t1.attnTime) AS inTime,
              (CASE WHEN MIN(t1.attnTime) < MAX(t1.attnTime) THEN MAX(t1.attnTime) else '' end) AS outTime,
       (CASE WHEN t4.Slot ='1' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '1')THEN 'P' 
             WHEN t4.Slot ='2' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '2')THEN 'P'
             WHEN t4.Slot ='3' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '3')THEN 'P'
             WHEN t4.Slot ='4' AND t1.attnTime<=(SELECT inTime FROM tbl_threshold WHERE id = '4')THEN 'P'
             WHEN t4.Slot ='1' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '1')THEN 'Early Out' 
             WHEN t4.Slot ='2' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '2')THEN 'Early Out'
             WHEN t4.Slot ='3' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '3')THEN 'Early Out'
             WHEN t4.Slot ='4' AND max(t1.attnTime)<(SELECT outTime FROM tbl_threshold WHERE id = '4')THEN 'Early Out'
             ELSE 'Late-In'
       END) AS Status

FROM tbl_attn_temp t1, tbl_assigned t3, tbl_instructor_info t4
JOIN (SELECT DISTINCT attnDate FROM tbl_attn_temp) t2
WHERE t1.attndate = t2.attnDate AND t1.TraineeID = t4.InstructorID
AND t1.attnDate='2016-01-13'
AND(CASE WHEN t4.Slot ='1' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '1') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '1') 
         WHEN t4.Slot ='2' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '2') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '2')
         WHEN t4.Slot ='3' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '3') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '3')
         WHEN t4.Slot ='4' THEN t1.attnTime BETWEEN(SELECT minLimit FROM tbl_threshold WHERE id = '4') AND (SELECT maxLimit FROM tbl_threshold WHERE id = '4')
    END)
GROUP BY t1.TraineeID, t2.attnDate
) as query2