【发布时间】:2019-10-29 01:30:32
【问题描述】:
我有一个如下所示的 mysql 结果:
| compare | field1 | field2 | much more |
-----------------------------------------
| new | x1 | y | ... |
| old | x1 | y | ... |
| old | x2 | y | ... |
| new | x2 | y | ... |
查询搜索两个表(新表和旧表)的差异,并按字段 1 对其进行排序(字段更多,但在这里简单点)。所以,查询返回的一切都是正确的,但只有一件事:在查询中,有一个 UNION ALL 与 FIRST fetch old,然后 UNION ALL 它到 SECOND new。
我想要的是一个结果,我的“比较”总是先是旧的,然后是新的。但是看看我的结果,有时我先得到新的,这会破坏其余的代码。
我试过了
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
【问题讨论】: