Topic: Užklausų apjungimas iš 2 db bei kelių lentelių

Sveiki,
Noriu sujungti keletą užklausų į vieną, bet niekaip nepavyksta.
šios užklausos yra iš dviejų DB, bei keturių lentelių, tame pačiame mysql serveryje.

pirma užklausa (iš pirmos db, bei 2 lentelių)

SELECT  t11.T.PAV AS Is_T_PAV1, round(sum(atstumas),1) as atstumas1
FROM db1.lentele_2 AS t2
LEFT JOIN db1.lentele1 AS t11 ON t2.Is_T_PAV = t11.id
Group by t11.T.PAV
ORDER BY atstumas DESC;

antra užklausa (iš antros db, bei 2 lentelių)

SELECT  t11.T.PAV AS Is_T_PAV2, round(sum(atstumas),1) as atstumas2
FROM db2.lentele_2 AS t2
LEFT JOIN db2.lentele1 AS t11 ON t2.Is_T_PAV = t11.id
Group by t11.T.PAV
ORDER BY atstumas DESC;

rezultatas norimas toks:

---------------------------------------------------------------
|   Is_T_PAV1  |  atstumas1 |  Is_T_PAV2 | atstumas2|
---------------------------------------------------------------
|       AAA       |     25         |   AAA         |      30       |
--------------------------------------------------------------
|       BBB       |   15           |    BBB        |      10       |
---------------------------------------------------------------
|       CCC      |   14           |   CCC        |       75       |
---------------------------------------------------------------

Bandžiau tai padaryt pasinaudojant virtualioms lentelėms, tačiau rezultatas budavo iškraipytas,daug pasikartojančių įrašų bei netikslus sumos rezultatas ties kiekvienu skirtingu įrašu.

Gal kas galite patarti kaip tai padaryt?

Dėkui,

Re: Užklausų apjungimas iš 2 db bei kelių lentelių

O kokiu būdu nori sujungti? Galiu tik spėti, kad pagal Is_T_PAV1 = Is_T_PAV2

Tokiu atveju turi galėti naudoti standartinius LEFT/INNER JOIN'us.

Re: Užklausų apjungimas iš 2 db bei kelių lentelių

Vienas iš paprastų, bet ne efektyvių būdų yra:

SELECT ...
FROM
   (SELECT ... FROM ...) tmp_lenta_1
      INNER/LEFT JOIN (SELECT ... FROM ...) tmp_lenta_2
      ON tmp_lenta_1.(...) = tmp_lenta_2.(...)

šita būdas gal kiek aiškesnis, bet problema tame, kad sujungimo metu nebus naudojami indeksai, nes sukurta sub-užklausos virtuali lentelė jau jokių indeksų neišsaugo/neturi. Taigi ir sujungimas bus lėtas.

Geresnis būdas būtų:

SELECT ...
FROM db1.lenta1
  INNER/LEFT JOIN db2.lenta1 ON db1.lenta1.(...) = db2.lenta1.(...)

čia veiks visi indeksai, tik gal kiek sunkiau bus suregsti visą užklausą, nes pirmu atveju užteks paprastos konstrukcijos abiejų užklausų sujungimui, o antru reikės jas išskaidyt ir sulieti (-;

P.S.: čia abiem atvejais pseudo-užklausos skirtis tik iliustruoti galimus veiksmus;

Re: Užklausų apjungimas iš 2 db bei kelių lentelių

Dėkui Mindaugai,
Pasirinkau pirmą variantą,pagal ją gautus duomenis  naudosiu tik grafikam atvaizduot