Opisana w poprzednim poście podwójna konkatenacja, jest mi potrzebna jako zagnieżdżone zapytanie czy też podzapytanie zapytania głównego. Całość w miarę poprawnie opracowałem przy zastosowaniu złączenia lewostronnego i operatora UNION, bo zapytanie dotyczyło dwóch lat ( tabel) bazy. Utworzyłem kwerendę a na jej podstawie raport w base i wszystko pięknie działa. Przetestowałem raport bezpośrednio na serwerze głównym bazy i dane zapytania prawidłowo się generowały. ( Błędów logicznych w uzyskanym wyniku zapytania też nie znaleziono)
Niestety okazało się, że jak zapytanie kierowane jest przez użytkowników do bazy nie z serwera głównego a z innego terminala to MySQL pokazuje błąd i nie generuje raportu Informując komunikatem, że nie może załadować danych.
Oto treść komunikatu:
Kod: Zaznacz cały
[MySQL][]ODBC 3.51 Driver][mysqld-5.1.42-community] Illegal mix of collations for operation 'UNION'
Podaje zapytanie wywołujące ten błąd :
Kod: Zaznacz cały
SELECT
`2009`.`wolne_1` AS `L.p.`,
`2009`.`RSD`,
`2009`.`rok`,
`2009`.`prowadzacy` AS `prowadzący`,
`2009`.`kwalifikacja`,
`2009`.`forma_postepowania` AS `forma`,
`2009`.`data_zdarzenia` AS `data zdarzenia`,
`2009`.`data_wszczecie` AS `data wszczęcia`,
`2009`.`data_przedluzenia` AS `data przedłużenia`,
`2009`.`uwagi` AS `data i obieg`,
`2009`.`wolne_1` AS `uwagi bieżące`
FROM
`2009` AS `2009`
WHERE
((`data_wszczecie` < curdate()-interval 2 month)
AND ( `data_przedluzenia`is null OR `data_przedluzenia` < curdate())
AND `forma_postepowania` ='zwykłe'
AND `2009`.`koniec` = 0)
OR
((`data_wszczecie` < curdate()-interval 3 month)
AND ( `data_przedluzenia`is null OR `data_przedluzenia` < curdate())
AND `forma_postepowania` ='pilne'
AND `2009`.`koniec` = 0)
UNION ALL
SELECT
`2010`.`wolne_1` AS `L.p.`,
`2010`.`RSD`,
`2010`.`rok`,
`2010`.`prowadzacy` AS `prowadzący`,
`2010`.`kwalifikacja`,
`2010`.`forma_postepowania` AS `forma`,
`2010`.`data_zdarzenia` AS `data zdarzenia`,
`2010`.`data_wszczecie` AS `data wszczęcia`,
`2010`.`data_przedluzenia` AS `data przedłużenia`,
GROUP_CONCAT(CONCAT_WS(' ', CONVERT(`2010_obieg`.`data`, CHAR(10)),`2010_obieg`.`obieg`) SEPARATOR '\n') AS `data i obieg`,
`2010`.`wolne_1` AS `uwagi bieżące`
FROM
{ OJ `rsd`.`2010` AS `2010` LEFT OUTER JOIN `rsd`.`2010_obieg` AS `2010_obieg` ON `2010`.`RSD` = `2010_obieg`.`id_rsd` }
WHERE
((`data_wszczecie` < curdate()-interval 2 month)
AND ( `data_przedluzenia`is null OR `data_przedluzenia` < curdate())
AND `forma_postepowania` ='zwykłe'
AND `2010`.`koniec` = 0)
OR
((`data_wszczecie` < curdate()-interval 3 month)
AND ( `data_przedluzenia`is null OR `data_przedluzenia` < curdate())
AND `forma_postepowania` ='pilne'
AND `2010`.`koniec` = 0)
GROUP BY `RSD`
ORDER BY `rok`,`rsd`;