Ik heb een heel vreemd probleem met mysql. Ik krijg een melding dat een tabel niet bestaat, terwijl deze tabel helemaal niet voorkomt in de query...
Nu gaat het om een stored procedure die ik aan het optimaliseren ben.
Wanneer ik de procedure uitvoer krijg ik de volgende foutmelding:
Wat doe ik hier precies fout? Ik kom er echt niet uit.
Nu gaat het om een stored procedure die ik aan het optimaliseren ben.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
| DELIMITER // DROP PROCEDURE `call_results`// CREATE PROCEDURE `call_results` ( project_id INT(11), start_date DATE, end_date DATE, show_depts CHAR(64) ) call_results_body: BEGIN DECLARE show_users CHAR(64) DEFAULT NULL; DECLARE EOF BOOL DEFAULT FALSE; DECLARE callfile_id INT; DECLARE callfile_cursor CURSOR FOR SELECT DISTINCT(`callFile`.`cfID`) AS callfile FROM `callFile` JOIN `callStates` ON `callFile`.`cfID` = `callStates`.`fk_cfID` JOIN ( `callSheet`, `user`, `mPerson2department`, `mScoreCard` ) ON `callFile`.`cfID` = `callSheet`.`fk_cfID` AND `callSheet`.`fk_scID` = `mScoreCard`.`mSCid` AND `callSheet`.`owner_uid` = `user`.`uid` AND `user`.`fk_pid` = `mPerson2department`.`fk_pid` WHERE (ISNULL(show_depts) OR FIND_IN_SET(`mPerson2department`.`fk_did`, show_depts)) AND `mScoreCard`.`date` BETWEEN start_date AND end_date AND `callFile`.`fk_mPid` = project_id ORDER BY `callFile`.`cfID`; DECLARE CONTINUE HANDLER FOR NOT FOUND SET EOF := TRUE; IF (show_depts IS NOT NULL) THEN SELECT GROUP_CONCAT(DISTINCT(`user`.`uid`)) INTO show_users FROM `user` JOIN `mPerson2department` ON `user`.`fk_pid` = `mPerson2department`.`fk_pid` AND FIND_IN_SET(`mPerson2department`.`fk_did`, show_depts); END IF; SELECT DISTINCT(`mDepartment`.`did`) AS id, `mDepartment`.`name` AS name FROM `mDepartment` JOIN ( `mPerson2department`, `user`, `callSheet`, `mScoreCard` ) ON `mDepartment`.`did` = `mPerson2department`.`fk_did` AND `mPerson2department`.`fk_pid` = `user`.`fk_pid` AND `user`.`uid` = `callSheet`.`owner_uid` AND `callSheet`.`fk_scID` = `mScoreCard`.`mSCid` AND `mScoreCard`.`fk_mPid` = project_id AND `mScoreCard`.`date` BETWEEN start_date AND end_date; SELECT `callFile`.`cfID` AS callfile, GROUP_CONCAT( DISTINCT(`callStates`.`name`) ORDER BY `callStates`.`cstID` ) AS callstates, GROUP_CONCAT( DISTINCT(`callQuestions`.`long`), '/', ( SELECT GROUP_CONCAT( `callQuestionOptions`.`value` ORDER BY `callQuestionOptions`.`fk_cqID` SEPARATOR '/' ) FROM `callQuestionOptions` WHERE `callQuestionOptions`.`fk_cqID` = `callQuestions`.`cqID` ) ORDER BY `callQuestions`.`cqID` ) AS questions, COUNT(DISTINCT(`callSheet`.`csID`)) AS result_count FROM `callFile` JOIN `callStates` ON `callFile`.`cfID` = `callStates`.`fk_cfID` JOIN ( `callSheet`, `mScoreCard` ) ON `callFile`.`cfID` = `callSheet`.`fk_cfID` AND `callSheet`.`fk_scID` = `mScoreCard`.`mSCid` JOIN `callQuestions` ON callFile.`cfID` = `callQuestions`.`fk_cfID` WHERE (ISNULL(show_users) OR FIND_IN_SET(`callSheet`.`owner_uid`, show_users)) AND `mScoreCard`.`date` BETWEEN start_date AND end_date AND `callFile`.`fk_mPid` = project_id GROUP BY `callFile`.`cfId` ORDER BY `callFile`.`cfID`; OPEN callfile_cursor; callfile_loop: LOOP FETCH callfile_cursor INTO callfile_id; IF (NOT EOF) THEN SELECT `callSheet`.`csID` AS `callsheet_id`, `mScoreCard`.`date` AS `date`, `mScoreCard`.`route_name` AS `location`, GROUP_CONCAT( `callResults`.`amount` ORDER BY `callResults`.`fk_cstID` ) AS `states`, `user`.`username` AS `owner` FROM `callFile` JOIN ( `callSheet`, `callResults`, `mScoreCard`, `user` ) ON `callFile`.`cfID` = `callSheet`.`fk_cfID` AND `callSheet`.`csID` = `callResults`.`fk_csID` AND `callSheet`.`fk_scID` = `mScoreCard`.`mSCid` AND `callSheet`.`owner_uid` = `user`.`uid` AND `mScoreCard`.`date` BETWEEN start_date AND end_date WHERE `callFile`.`cfID` = callfile_id GROUP BY `callSheet`.`csID` ORDER BY `mScoreCard`.`date`; ELSE CLOSE callfile_cursor; LEAVE callfile_loop; END IF; END LOOP; END// DELIMITER ; |
Wanneer ik de procedure uitvoer krijg ik de volgende foutmelding:
Voor de duidelijkheid, het gaat fout ergens rond regel 126. Dit is namelijk waar ik aan het aanpassen ben. Er zijn zoals je ziet daar twee tabellen uit de join weggehaald en de where clause is aangepast. Er staat sowieso nergens een dubbele `callSheet` (wat je uit de fout zou opmaken). Ook bestaat de kolom fk_scID gewoon in de tabel callSheet.ERROR 1054 (42S22): Unknown column 'callSheet.callSheet.fk_scID' in 'on clause'
Wat doe ik hier precies fout? Ik kom er echt niet uit.
Ik ontken het bestaan van IE.