Autor Téma: Funguje mi len RIGHT. LEFT v žiadnom prípade  (Přečteno 312 krát)

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Funguje mi len RIGHT. LEFT v žiadnom prípade
« kdy: 24-10-2020, 14:11:53 »

Tabuľky FLATS a OWNER_FLAT sú prázdne. Nerozumiem prečo mi funguje len RIGHT a LEFT nie
Kód: [Vybrat]
SELECT F.IDFLATS, O.IDOWNERS, OWF.IDOWNER_FLAT, F.FLATNUMBER, O.FULLNAME, O.MOBIL
FROM
  FLATS F
  LEFT OUTER JOIN OWNER_FLAT OWF ON (F.IDFLATS = OWF.FKFLAT)
/*  LEFT OUTER JOIN OWNERS O ON (O.IDOWNERS = OWF.FKOWNERS)*/    //  DataSet je prázdny
/*  RIGHT OUTER JOIN OWNERS O ON (O.IDOWNERS = OWF.FKOWNERS)*/   // OK
/*  LEFT OUTER JOIN OWNERS O ON (OWF.FKOWNERS = O.IDOWNERS)*/    //  DataSet je prázdny
  RIGHT OUTER JOIN OWNERS O ON (OWF.FKOWNERS = O.IDOWNERS)      // OK
WHERE
  O.FKFOCS = 1331
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 120
  • Karma: 0
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #1 kdy: 25-10-2020, 11:48:39 »
Protože Left outer join se napojuje na existující data. Flats máš prázdné, proto v řídící tabulce nic není a Left outer join se nema na co napojit.

LEFT OUTER JOIN: Představ si, že máš nějakou tabulku (flats), ke které připojíš zprava (aby to nebylo tak jednoduché) další tabulku a co se ti potká, to se zobrazí, jinak null. Žádné řádky se nedoplňují.
RIGHT OUTER JOIN funguje jinak, ten přidá všechny řádky z tabulky, kterou připojuješ a co jde napojit, tak napojí.

Aby ti fungovalo LEFT OUTER JOIN, musel bys vycházet z Owners - z něčeho, kde data jsou.
« Poslední změna: 25-10-2020, 11:54:12 od Jan Fiala »

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #2 kdy: 25-10-2020, 12:26:13 »
Tak o tom rozdiele medzi LEFT a RIGHT som nevedel! Dosť som toho čítal, ale nikde som na to nenarazil. Pritom to je podstatná informácia.
To vysvetľuje aj odporúčanie: vyhýbajte sa RIGHT, a používajte LEFT všade kde sa dá. Osobne som sa s tým stretol. Zrýchlenie bolo o dva rády.
Prikladám grafické znázornenie stavu. Údaje sú len vo FLATS.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3071
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #3 kdy: 25-10-2020, 17:20:20 »
Tak o tom rozdiele medzi LEFT a RIGHT som nevedel! Dosť som toho čítal, ale nikde som na to nenarazil. Pritom to je podstatná informácia.
To vysvetľuje aj odporúčanie: vyhýbajte sa RIGHT, a používajte LEFT všade kde sa dá.
No proto je to taky soucasti kazdeho ucebniho textu SQL napr.
https://www.google.com/search?q=LEFT+vs.+RIGHT+join&client=firefox-b-d&sxsrf=ALeKk03k_pdEBAm2dWv18o2t05wCC3bcig:1603642231384&tbm=isch&source=iu&ictx=1&fir=b11_SCzJzb_wYM%252CinY1wXI3NvD6cM%252C_&vet=1&usg=AI4_-kS1DA4pqRcZJAkFeEQVKO0HjxIuQg&sa=X&ved=2ahUKEwjQkLHskNDsAhXCDGMBHe64AisQ_h16BAgJEAc#imgrc=b11_SCzJzb_wYM

To doporuceni je obecne pic*vina, protoze zalezi, co mas na leve/prave strane

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #4 kdy: 25-10-2020, 18:06:33 »
To odporúčanie máš na mysli toto
Citace
Aby ti fungovalo LEFT OUTER JOIN, musel bys vycházet z Owners - z něčeho, kde data jsou.
Lebo ak áno, tak Owners je zle. Ale pokračuje ďalej a tam to upresňuje. Takže s tým problém nemám.
Problém je s tým, že nemám žiadnu tabuľku, ktorú by som tu mohol použiť. Ostáva mi jedine RIGHT.
Veľmi ma to netrápi, lebo sa to použije pre každé SVB jediný raz.
Pozerám na ten odkaz, ale všade vidím, že obrázok pre RIGHTT je zrkadlový obraz LEFT.
Nič také, čo tu popisuje Fiala.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3071
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #5 kdy: 25-10-2020, 18:21:29 »
To odporúčanie máš na mysli toto
Ne, to doporuceni, ze se ma pouzivat LEFT a ne RIGHT.
Citace

Pozerám na ten odkaz, ale všade vidím, že obrázok pre RIGHTT je zrkadlový obraz LEFT.
Nič také, čo tu popisuje Fiala.
No vsak, proto je to picovina s tim pouzivanim LEFT pred RIGHT. A JF popisuje presne, co je na tech diagramech: vzdy je vysledkem mnozina radku, ktera odpovida pruniku obou mnozin (inner join) a zbyvajici radky z leve nebo prave mnoziny (tabulky).

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #6 kdy: 25-10-2020, 18:42:09 »
Vidím, že si to musím znova poriadne pozrieť a uvedomiť si čo je čo. Už mi pomaly začína dochádzať, čo napísal JF.
Mám jednu otázku. Ja celý čas žijem v tom, že ľavá a pravá tabuľka sú určené v časti JOIN ON (...)
Kód: [Vybrat]
A
INNER JOIN B ON (A.XX = B.YY)  // A - ľavá tabuľka
INNER JOIN B ON (B.XX = A.YY)  // B - ľavá tabuľka
Je to naozaj tak?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3071
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #7 kdy: 25-10-2020, 18:47:00 »
Je to naozaj tak?
Ne. V tom vyrazu plati obvykle komutativni aj. podobne zakony, takze je jedno, jestli napises A.XX=B.XX nebo B.XX=A.XX

Kód: SQL [Vybrat]
  1. LeftTable A INNER JOIN RightTable B ON ....
  2. LeftTable A LEFT OUTER JOIN RightTable B ON ....
  3. LeftTable A RIGHT OUTER JOIN RightTable B ON ....
  4.  

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #8 kdy: 25-10-2020, 19:04:54 »
Neviem ako som k tomu poznaniu prišiel ??? , ale teraz mi to vysvetľuje niektoré veci. Takže ak chcem zmeniť ľavú a pravú tabuľku, tak mi je teraz jasné, že musím zmeniť ich poradie vo výraze
Kód: [Vybrat]
A LEFT/RIGHT JOIN B ON () // NA
B LEFT/RIGHT JOIN A ON ()
Dobrá diera vo vedomostiach. Tým pádom úplne ináč vnímam celú túto (a podobné) debatu.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3071
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #9 kdy: 25-10-2020, 19:10:43 »
Dobrá diera vo vedomostiach. Tým pádom úplne ináč vnímam celú túto (a podobné) debatu.
Jeste je dobre si uvedomit tohle: http://www.sql-tutorial.ru/en/book_explicit_join_operations/page4.html

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #10 kdy: 25-10-2020, 19:15:41 »
Vďaka tejto mylnej  "vedomosti" o určení postavenia tabuľky som si zničil všetky sql texty s RIGHT. Mám čo robiť. Ako tak pozerám, je ich len 18.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #11 kdy: 25-10-2020, 19:19:33 »
Mám knihu SQL Kompletní prúvodce - James R. Groff, Paul N. Weinberg.
Asi si to musím prečítať znova a hlavne pozorne.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5530
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Funguje mi len RIGHT. LEFT v žiadnom prípade
« Odpověď #12 kdy: 25-10-2020, 19:25:31 »
Ten posledný odkaz sa javí ako veľmi zaujímavý. Pozriem si to celé. Ďakujem.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.