Ik wil een where clause toevoegen op een nested join. Wanneer ik deze echter onder de ON clause zet krijg ik een error 1064 (onjuist gebruik van een reserved keyword).
Zet ik het in de outer body dan krijg ik een 'Unknown column' fout.
Hoe kan ik een where clause toevoegen aan een nested join? De query is als volgt:
Het gaat dus mis bij `planning_extra_shifts`.`day` IS NULL. Dit heb ik als where clause tussen de haakjes geprobeerd, maar deze geeft dat een error 1064.
Zet ik het in de outer body dan krijg ik een 'Unknown column' fout.
Hoe kan ik een where clause toevoegen aan een nested join? De query is als volgt:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| DELIMITER // DROP PROCEDURE IF EXISTS `get_day_count`// CREATE PROCEDURE `get_day_count` ( department INT, startdate DATE, enddate DATE ) READS SQL DATA COMMENT 'Get worked days for department, start_date, end_date' get_day_count_body: BEGIN DECLARE i DATE; DECLARE shifts TEXT; CREATE TEMPORARY TABLE `days_in_range` (day DATE); SET i = startdate; SELECT GROUP_CONCAT(`planning_shifts`.`id`) INTO shifts FROM `planning_shifts` JOIN `planning_projects` ON `planning_shifts`.`fk_pp_id` = `planning_projects`.`id` WHERE `planning_projects`.`fk_did` = department; insert_loop: LOOP INSERT INTO `days_in_range` (day) VALUES (i); SET i = ADDDATE(i, 1); IF (i > enddate) THEN LEAVE insert_loop; END IF; END LOOP insert_loop; SELECT `days_in_range`.`day` AS `day`, COUNT(`planning_regular_shifts`.`fk_pid`) AS `regular_shifts`, (SELECT COUNT(`planning_extra_shifts`.`fk_pid`) FROM `planning_extra_shifts` JOIN `planning_shift_status` ON `planning_extra_shifts`.`status` = `planning_shift_status`.`id` WHERE `planning_extra_shifts`.`work_date` = `days_in_range`.`day` AND FIND_IN_SET(`planning_extra_shifts`.`fk_ps_id`, shifts) AND `planning_shift_status`.`worked` = 1) AS `extra_shifts` FROM `days_in_range` LEFT JOIN ( `planning_regular_shifts` LEFT JOIN `planning_extra_shifts` ON `planning_regular_shifts`.`day` = DAYOFWEEK(`planning_extra_shifts`.`work_date`) AND `planning_regular_shifts`.`fk_ps_id` = `planning_extra_shifts`.`fk_ps_id` AND `planning_regular_shifts`.`fk_pid` = `planning_extra_shifts`.`fk_pid` ) ON DAYOFWEEK(`days_in_range`.`day`) = `planning_regular_shifts`.`day` AND `days_in_range`.`day` BETWEEN `planning_regular_shifts`.`start_date` AND `planning_regular_shifts`.`end_date` WHERE FIND_IN_SET(`planning_regular_shifts`.`fk_ps_id`, shifts) AND `planning_extra_shifts`.`day` IS NULL GROUP BY `days_in_range`.`day`; DROP TABLE `days_in_range`; END// DELIMITER ; |
Het gaat dus mis bij `planning_extra_shifts`.`day` IS NULL. Dit heb ik als where clause tussen de haakjes geprobeerd, maar deze geeft dat een error 1064.
Ik ontken het bestaan van IE.