Autor Téma: Divný výsledok  (Přečteno 280 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7384
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Divný výsledok
« kdy: 26-07-2023, 22:19:18 »

Mám opakované záznamy (tučne) pre podmienky =1 a >1. Nerozumiem prečo.
T1 - prvá časť (Team1FK)
T2 - druhá časť. Po UNION (Team2FK)
COUNT(T.COUNTRYFK) je tu vo výsledku len kvôli kontrole. Samozrejme zodpovedá výsledku.
Kód: [Vybrat]
SELECT T.COUNTRYFK, C.TITLE, C.COUNTRYID, COUNT(T.COUNTRYFK)
FROM MATCHES M
  INNER JOIN TEAMS T ON M.TEAM1FK = T.TEAMID
  INNER JOIN COUNTRIES C ON T.COUNTRYFK = C.COUNTRYID
  INNER JOIN ROUNDS R ON M.ROUNDFK = R.ROUNDID
WHERE R.SEASONFK = 8363 AND M.REMATCH = False
GROUP BY T.COUNTRYFK, C.TITLE, M.REMATCH, C.COUNTRYID
HAVING COUNT(T.COUNTRYFK) > 1
UNION
SELECT T.COUNTRYFK, C.TITLE, C.COUNTRYID, COUNT(T.COUNTRYFK)
FROM MATCHES M
  INNER JOIN TEAMS T ON M.TEAM2FK = T.TEAMID
  INNER JOIN COUNTRIES C ON T.COUNTRYFK = C.COUNTRYID
  INNER JOIN ROUNDS R ON M.ROUNDFK = R.ROUNDID
WHERE R.SEASONFK = 8363 AND M.REMATCH = False
GROUP BY T.COUNTRYFK, C.TITLE, M.REMATCH, C.COUNTRYID
HAVING COUNT(T.COUNTRYFK) > 1
ORDER BY 2
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7384
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Divný výsledok
« Odpověď #1 kdy: 27-07-2023, 08:25:00 »
Ráno je múdrejšie večera.
Kvôli testovaniu som do údajov zaviedol záznam navyše = chyba.
Teraz sa mi to oplatilo. Označil som si konfliktné údaje a vyjasnilo sa mi. Viď prílohu - vpravo.
Riešenie je tým pádom jednoduché. Najprv získam úplný dataset. Bez GROUP BY a HAVING. Tie uplatním až na tento Dataset :) 
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.