mboost-dp1
MySQL advanced JOIN
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej Newz'ere jeg har to tables som skal joines via en "link"-table
Jeg kan godt LEFT JOINE på den ene led og den anden led, men det jeg har brug for er at tabellerne bliver JOIN'et således at alle entries i begge tabeller bliver vist uanset om "den andens række" er tom.
For at forenkle det :
table t1:
table t2 :
SELECT t1.k, t1.v, t2.k, t2.v ....... JOIN t1 ... t2 ON (t1.k=t2.k)
Ønsket resultat :
Jeg kunne måske godt klare det med at "joine" med where t1.k=t2.k, men noget siger mig at det er mere rigtigt at bruge JOIN. Desuden er det også tre tabeller, der skal joines.
Kan man ikke bruge noget STRAIGHT_JOIN NATURAL CROSS INNER OUTER LEFT USING ?
Jeg kan godt LEFT JOINE på den ene led og den anden led, men det jeg har brug for er at tabellerne bliver JOIN'et således at alle entries i begge tabeller bliver vist uanset om "den andens række" er tom.
For at forenkle det :
table t1:
------------
| k | v |
------------
| 1 | v1.1 |
| 2 | v1.2 |
------------
table t2 :
------------
| k | v |
------------
| 2 | v2.1 |
| 3 | v2.2 |
------------
SELECT t1.k, t1.v, t2.k, t2.v ....... JOIN t1 ... t2 ON (t1.k=t2.k)
Ønsket resultat :
-----------------------------
| t1.k | t1.v | t2.k | t2.v |
-----------------------------
| 1 | v1.1 | | |
| 2 | v1.2 | 2 | v2.1 |
| | | 3 | v2.2 |
------------------------------
Jeg kunne måske godt klare det med at "joine" med where t1.k=t2.k, men noget siger mig at det er mere rigtigt at bruge JOIN. Desuden er det også tre tabeller, der skal joines.
Kan man ikke bruge noget STRAIGHT_JOIN NATURAL CROSS INNER OUTER LEFT USING ?
Mener det du leder efter må være FULL JOIN.
Så vidt jeg husker fra mit databasekurses så vil det lave en JOIN hvor alle rækker inkluderes fra begge tabeller, og hvis de ikke matcher på det du joiner på, vil der blive indsat NULL værdier, så:
SELECT * FROM t1 FULL JOIN t2 ON t1.v = t2.v
Eller sådan noget lignende
Så vidt jeg husker fra mit databasekurses så vil det lave en JOIN hvor alle rækker inkluderes fra begge tabeller, og hvis de ikke matcher på det du joiner på, vil der blive indsat NULL værdier, så:
SELECT * FROM t1 FULL JOIN t2 ON t1.v = t2.v
Eller sådan noget lignende
#6 Jeg opnår ikke den ønskede efekt ved bare at bruge JOIN. Så droppes alle rækker, hvor der ikke står noget i begge tabeller.
Ang. USING :
Nu er mit simple eksempel lidt dårligt, da det er tre tables der skal joines og de columns de skal joine på hedder ikke det samme, så så vidt jen kan forstå kan jeg ikke bruge den med USING. Det kan godt være den ville virke i min simplifiseringen.
Så vidt jen kan forstå, så det jeg mangler er en FULL OUTER JOIN funktionalitet.
Hvordan faker man så det i mySQL ?
Kan man lave en LEFT AND RIGHT JOIN ?
Ang. USING :
Nu er mit simple eksempel lidt dårligt, da det er tre tables der skal joines og de columns de skal joine på hedder ikke det samme, så så vidt jen kan forstå kan jeg ikke bruge den med USING. Det kan godt være den ville virke i min simplifiseringen.
Så vidt jen kan forstå, så det jeg mangler er en FULL OUTER JOIN funktionalitet.
Hvordan faker man så det i mySQL ?
Kan man lave en LEFT AND RIGHT JOIN ?
#8 Det er også sådan noget jeg er ved at rode mig ud i.
Nu fandt jeg lige denne :
How to simulate FULL OUTER JOIN in MySQL
der ser lidt spændende ud.
Jeg når ikke mere i dag, men indtil videre så tak for hjælpen.
Nu fandt jeg lige denne :
How to simulate FULL OUTER JOIN in MySQL
der ser lidt spændende ud.
Jeg når ikke mere i dag, men indtil videre så tak for hjælpen.
røvskæg (5) skrev:#2 Det lydder lækkert, men efter at have kigget på det, må jeg spørge dig om det kursus ikke var i oracle ?
Det var faktisk i SQL generelt (altså efter standarden), praktisk arbejde blev dog udført i DB2, men da ingen implementerer hele standarden så skal det nok passe at mySQL ikke har support for FULL JOIN, ligesåvel som DB2 ikke har support for NATURAL JOIN eller ASSERTIONS
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.