У меня есть MySQL результат, который выглядит следующим образом:
| compare | field1 | field2 | much more |
-----------------------------------------
| new | x1 | y | ... |
| old | x1 | y | ... |
| old | x2 | y | ... |
| new | x2 | y | ... |
Запрос выполняет поиск различий двух таблиц (новой и старой) и упорядочивает их по field1 (с гораздо большим количеством полей, но здесь все будет проще). Итак, запрос возвращает все правильно, кроме одной вещи: в запросе есть UNION ALL с FIRST, который извлекает старый, а затем UNION ALL - во ВТОРОЙ новый.
То, что я хочу получить, - это результат, в котором мое «сравнение» ВСЕГДА имеет ПЕРВЫЙ старый, а затем новый. Но посмотрите на мой результат, иногда я сначала получаю новый, и это нарушит остальную часть кода.
Я попробовал это с
ORDER BY FIELD(compare, 'old', 'new'), ...
но это не сработало.
Кто-нибудь с идеей?
Результат должен быть таким:
| compare | field1 | field2 | much more |
-----------------------------------------
| old | x1 | y | ... |
| new | x1 | y | ... |
| old | x2 | y | ... |
| new | x2 | y | ... |
Редактировать # 1:
Вот полный запрос для этого:
SELECT
MIN(compareTables) AS 'table',
CONCAT(ObjNr, PFKt, WhgNr, DatVon, AdrNr, KEY_Firma) AS 'primary',
ObjNr,
PFKt,
WhgNr,
DatVon,
DatBis,
AdrNr,
KEY_Firma,
Info,
PKto,
FI_MieterPKto,
PFktArtEigMiet,
ST_SchlAustriaPKto,
inaktiv,
inaktivBis
FROM ((SELECT
'old' AS compareTables,
ObjNr,
PFKt,
WhgNr,
DatVon,
DatBis,
AdrNr,
KEY_Firma,
Info,
PKto,
FI_MieterPKto,
PFktArtEigMiet,
ST_SchlAustriaPKto,
inaktiv,
inaktivBis
FROM table_old.PF_PFkt) UNION ALL (SELECT
'new' AS compareTables,
ObjNr,
PFKt,
WhgNr,
DatVon,
DatBis,
AdrNr,
KEY_Firma,
Info,
PKto,
FI_MieterPKto,
PFktArtEigMiet,
ST_SchlAustriaPKto,
inaktiv,
inaktivBis
FROM table_new.PF_PFkt)) AS compareTables
WHERE 'primary' IS NOT NULL
GROUP BY ObjNr,
PFKt,
WhgNr,
DatVon,
DatBis,
AdrNr,
KEY_Firma,
Info,
PKto,
FI_MieterPKto,
PFktArtEigMiet,
ST_SchlAustriaPKto,
inaktiv,
inaktivBis
HAVING COUNT(*) = 1
ORDER BY ObjNr, PFKt, WhgNr, DatVon, AdrNr, KEY_Firma
и часть результата