IF LEFT JOIN
Sziasztok,
todnátok segíteni ebben a kérdésben:
Ez persze nem jó :-( csak az elmélete:Azt szeretném elérni, ha az azonosítóban "szamla_resz_fizetes.azonosito" szerepel a PU akkor csatolja mögé (left join -al) a bejövő számla "bejovo_szamla" adatait, ha nem szerepel akkor pedig a számla "szamla" adatait.
Milyen megoldás létezik erre?
Köszi!
■ todnátok segíteni ebben a kérdésben:
Ez persze nem jó :-( csak az elmélete:
select * from szamla_resz_fizetes
if(szamla_resz_fizetes .azonosito like('%PU%'))
left join bejovo_szamla on(bejovo_szamla_fejlec.azonosito = szamla_resz_fizetes.azonosito)
ELSE
left join szamla on (szamla.azonosito = szamla_resz_fizetes.azonosito)
ENDIF where datum >= '2015-01-01' and datum <= '2016-01-01';
Milyen megoldás létezik erre?
Köszi!
ON
Ez esetben a JOIN ugye alapból így működik, vagy legalábbis ahol nem talál illeszkedést, ott a vontakozó tábla mezői NULL értékűek lesznek.
Ha mindkét táblában vannak sorok minden azonosítóhoz, csak valamiért a lekérdezésben ki akarnád nullázni az egyes táblákhoz tartozó mezőket a "PU" megléte alapján, akkor:
Ha ezt el szeretnéd kerülni, akkor használhatsz UNION-t is, és a két SELECT WHERE feltételében szűrsz a "PU"-ra, a JOIN ON-ja helyett:
És a teljesség igényének kedvéért leírom, hogy választhatnád azt a meglehetősen ronda megoldást, hogy UNION helyett a mezőkhöz írsz feltételt az eredeti dupla JOIN-os lekérdezésben
SELECT IF(r.azonosito LIKE '%PU%', b.valami, s.valami) as valami
. Ebben az esetben ezt nem ajánlom se teljesítmény, se fenntarthatóság szempontjából.FELTÉTEL
- Az első verzió tökéletes, de van egy feltételem ami még érdekes:
van olyan feltételem is, hogy valuta, ez csak azért gond mert mindkét táblába szerepel, és így kétértelmű hibát dob :-(
Szóval még
WHERE (ha a szamla_resz_fizetes.azonosito -ban szerepel a like('%PU%') akkor
bejovo_szamla.valuta like('%HUF%')
HA nem szerepel benne akkor
szamla.valuta like('%HUF%')
- az UNION-os megoldást így gondoltam jobb lesz, viszont az azért dob vissza hibát mert nem egyeznek az oszlopok számai :-(
Tudsz még a WHERE részre is segíteni egy feltétel megoldásában?
Hálás köszönet!
Nevek
A kétértelműséget ki lehet kerülni, ha eléírod, hogy melyik tábla mezőjére hivatkozol, mint a példáimban. Ha jobban belegondolok, akkor gondolom a datum mező a szamla_resz_fizetes táblában van, így azok elé is illene odaírni, hogy "r.".
Feltételezve az első példám elnevezéseit, ilyen lesz a WHERE:
Köszönet !