如何使用2个表数据获得单个结果

问题描述 投票:0回答:2

我必须具有相同结构的表2。我已经通过使用以下查询使用一个表来获得结果

SELECT *,COUNT(Time), 
             CASE WHEN COUNT(Time) = 1 
                 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' 
                 THEN Time END ELSE MIN(Time) 
                 END as time_in, 
                 CASE WHEN COUNT(Time) = 1 
                     THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' 
                     THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) 
                     END as time_out 
                 FROM attendancedata 
                 INNER JOIN nonacadamic 
                 ON attendancedata.EnrolledID = nonacadamic.emp_id 
                 WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' 
                 GROUP BY EnrolledID,Date

此查询将在时间上分为2部分(时间和超时)。它工作正常。现在也要从花药表中获取数据。它也具有相同的结构attendancedata表。

出勤数据表结构

EnrolledID  Date    Time    
23  2019-09-09  16:19:00    
53  2019-08-27  08:19:00

tempattendancedata表结构

EnrolledID  Date    Time    
23  2019-09-09  16:19:00    
23  2019-09-20  08:19:00

我想获得结果,请考虑以上表格记录,然后将时间分成两个部分。我该如何执行此任务? 实际要求是tempattendancedata表数据也需要考虑时间分割

mysql sql
2个回答
0
投票
您使用UNION ALL包含临时表的结果,然后将其放入subquery语句的select case

SELECT * *,COUNT(Time) ,CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' THEN Time END ELSE MIN(Time) END as time_in, CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) END as time_out FROM (SELECT * FROM attendancedata INNER JOIN nonacadamic ON attendancedata.EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' UNION ALL SELECT * FROM tempattendancedata INNER JOIN nonacadamic ON attendancedata.EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%') t1 GROUP BY t1.EnrolledID, t1.Date


0
投票
嗨,我认为这是您想要的

http://www.mysqltutorial.org/sql-union-mysql.aspx

SELECT id FROM t1 UNION SELECT id FROM t2;

所以您的查询将类似于...

SELECT *,COUNT(Time), CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' THEN Time END ELSE MIN(Time) END as time_in, CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) END as time_out FROM attendancedata INNER JOIN nonacadamic ON attendancedata.EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' GROUP BY EnrolledID,Date UNION SELECT *,COUNT(Time), CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '00:00:00' && Time <= '12:15:00' THEN Time END ELSE MIN(Time) END as time_in, CASE WHEN COUNT(Time) = 1 THEN CASE WHEN Time > '12:15:00' && Time <= '23:59:59' THEN Time END ELSE NULLIF(MAX(Time), MIN(Time)) END as time_out FROM tempattendancedata INNER JOIN nonacadamic ON tempattendancedata .EnrolledID = nonacadamic.emp_id WHERE nonacadamic.emp_id = '".$_POST["emp_id"]."' AND Date LIKE '$currentMonth%' GROUP BY EnrolledID,Date

© www.soinside.com 2019 - 2024. All rights reserved.