(LEFT) JOIN?
Sziasztok!
Igyekeztem általános fórumnevet választani, mert bár lehet, hogy ezúttal nem a JOIN lesz a megoldás, így a későbbiekben is alkalmazható lesz a "terem" e kényes területtel kapcsolatban. A lényeg: remélem, senkit nem vezet tévútra a téma címe a megoldás keresésekor.
Adott három tábla, mondjuk t1, t2, t3.
t1:
- id_t1
- turista
t2:
- id_t2
- hely
t3:
- id_t3
- fenykep
Azt szeretném megoldani, hogy t1-ből kiválasszon egy adott azonosítóhoz tartozó sort, t2-ből szintén, és t3-ból is kiválasszon egyet, ha létezik...
t1-ben és t2-ben biztosan szerepel a megfelelő 1-1 sor, t3-ban viszont lehet, hogy van megfelelő, lehet, hogy nincs. t3-mal kapcsolatban az információt a meglét/nemlét hordozná, tehát csupán annyit szeretnék tudni, van-e megfelelő sor a táblában.
(Egy bizonyos turistánk biztosan járt egy adott helyen, de nem tudjuk, készített-e képet.)
Megoldható ez egy lekérdezésben? A LEFT JOIN-nal szenvedtem idáig, de egyszerűen nem jövök rá a megoldásra.
(Lehet, hogy hülye kérdés, de már átolvastam a weblaboron végzett keresés találatait, néztem a google-ön az eredményeket, meg persze manualt oda-vissza, és már kitépkedtem az összes hajam... :)
Előre is köszönöm!
■ Igyekeztem általános fórumnevet választani, mert bár lehet, hogy ezúttal nem a JOIN lesz a megoldás, így a későbbiekben is alkalmazható lesz a "terem" e kényes területtel kapcsolatban. A lényeg: remélem, senkit nem vezet tévútra a téma címe a megoldás keresésekor.
Adott három tábla, mondjuk t1, t2, t3.
t1:
- id_t1
- turista
t2:
- id_t2
- hely
t3:
- id_t3
- fenykep
Azt szeretném megoldani, hogy t1-ből kiválasszon egy adott azonosítóhoz tartozó sort, t2-ből szintén, és t3-ból is kiválasszon egyet, ha létezik...
t1-ben és t2-ben biztosan szerepel a megfelelő 1-1 sor, t3-ban viszont lehet, hogy van megfelelő, lehet, hogy nincs. t3-mal kapcsolatban az információt a meglét/nemlét hordozná, tehát csupán annyit szeretnék tudni, van-e megfelelő sor a táblában.
(Egy bizonyos turistánk biztosan járt egy adott helyen, de nem tudjuk, készített-e képet.)
Megoldható ez egy lekérdezésben? A LEFT JOIN-nal szenvedtem idáig, de egyszerűen nem jövök rá a megoldásra.
(Lehet, hogy hülye kérdés, de már átolvastam a weblaboron végzett keresés találatait, néztem a google-ön az eredményeket, meg persze manualt oda-vissza, és már kitépkedtem az összes hajam... :)
Előre is köszönöm!
kapcsolo tablak
tehat a negyedik tabla a latogatas tabla:
*latogatas_id,
-turista_id,
-hely_id,
(itt mege lehet esetleg datum pl hogy mikor volt ott...)
Az otodik tabla pedig osszakpcsolja a latogatast a fotoval.
* t5_id
- foto_id
- latogatas_id
Ezekutan mar csak t4 es t5 talat kell joinnolni es ha van sora akkor keszitett fotot.
Kis kötözködés
- foto_id
- latogatas_id
Ha a te megoldásod szerint járunk el, és amennyiben a * az elsődleges kulcsot jelzi (de egyébként is), szerintem felesleges a t5_id mező felvétele. A latogatas_id -k és foto_id -k önmagukban is egyediek, és a kettő együtt meg pláne, hiszen ugyanazon látogatásnál nem lehet kétszer ugyanazt a fotót megcsinálni (ugyanazt le lehet fényképezni persze még egyszer, de azért ez már egy másik fotó). A tábla sorai tehát egyértelműen azonosíthatók e két mezővel. A JOIN-nál is a latogatas_id szerepel kulcsként, a t5_id-t fel sem használnánk. Ilyen jellegű kapcsolótábláknál szerintem felesleges külön elsődleges kulcs mező felvétele.
Javítsatok ki, ha tévednék...
Sziasztok:
P][G
Köszönöm - és a megoldás...
Köszönöm hozzászólásaitok!
Való igaz, azt elfelejtettem leírni, hogy a táblákat meglévő id-ken át kapcsolom (illetve adott, konkrét értékkel). Ennek megfelelően tehát:
t1:
- id_t1 (fix értéket kap)
- turista
t2:
- id_t2 (fix értéket kap)
- hely
t3:
- id_t3
- fenykep
- turista_id (<- kimaradt)
Pusztán a probléma leírása már segített annyit, hogy végül - ha minden igaz - rájöttem a megoldásra:
FROM turistak t1
LEFT JOIN helyek t2 ON t2.id_t2=1
LEFT JOIN fenykepek t3 ON t3.turista_id = t1.id_t1
WHERE t1.id_t1=2
Ez persze felvet egy kérdést: jól értettem a feltételek használatát? Ez a megoldás így jó? (Működni látszik, de attól még rejthet elvi hibát.)
Előre is köszönöm!
Előző is én voltam...
nincs benne
Egyebkent LEFT JOIN helyett INNER JOIN jobb lenne neked.
LEFT JOIN eseten elso tablabol visszadja azokat a sorokat is amire nem volt par, INNER JOIN-nal viszont csak azokat ahol volt.
Igy csak akkor kapsz vissza talalatot ha van kep a turistahoz.
Pig: igen valszeg folosleges a t5_id.
...
Az INNER JOIN-t pedig kipróbálom, köszönöm!
az lehet
Illetve pontosabban:
A lekerdezesed eredmenye szerintem:
Az OSSSZES kep attol a turistatol akinek 2 az ID-je es volt az 1-es ID-ju helyen.
Tehat a turista osszes kepe es nem csak azok amik az adott helyen keszultek.
v2.0 :)
t3:
- id_t3
- fenykep
- turista_id
- hely_id (<-)
FROM turistak t1
LEFT JOIN helyek t2 ON t2.id_t2=1
LEFT JOIN fenykepek t3 ON (t3.turista_id = t1.id_t1) AND (t3.hely_id = t2.id_t2)
WHERE t1.id_t1=2
Így korrekt?
logikailag nem
Ha egy felhasznalo nem keszitett kepet akkor fogalmad se lesz, hogy jart-e egy adott helyen!
Left join helyett pedig javasoltam az inner joint az eredeti problemara.
Akkor még ügyködök rajt...