Forum » Programiranje » MySQL join problem
MySQL join problem
Poldi112 ::
Imam 3 tabele, v vsaki sifra in kolicina. Vecina sifer obstaja v vseh tabelah, ima pa vsaka se kaksno svojo. Zdaj bi rad query, ki mi vrne vse sifre in kolicine v smislu:
sifra - kolicina A - kolicina B - kolicina C
fdsa3 - 5 - null - 20
443sf - 3 - 33 - 12
...
Problem je ker mi join vrne samo sifre iz ene tabele in kolicino ujemajoce se sifre iz ostalih tabel, jaz bi pa rad vse sifre pobral.
Vgnezden query bi znal resit zadevo, samo ga moj mysql (4.0.21) se ne podpira.
sifra - kolicina A - kolicina B - kolicina C
fdsa3 - 5 - null - 20
443sf - 3 - 33 - 12
...
Problem je ker mi join vrne samo sifre iz ene tabele in kolicino ujemajoce se sifre iz ostalih tabel, jaz bi pa rad vse sifre pobral.
Vgnezden query bi znal resit zadevo, samo ga moj mysql (4.0.21) se ne podpira.
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Poldi112 ::
Ok, da naredim en simple primer.
tabelaA:
hruske 5
jabolka 7
tabelaB
hruske 9
banane 3
Sedaj bi rad rezultat:
sadez kolicinaA kolicinaB
hruske 5 9
jabolka 7 null
banane null 3
tabelaA:
hruske 5
jabolka 7
tabelaB
hruske 9
banane 3
Sedaj bi rad rezultat:
sadez kolicinaA kolicinaB
hruske 5 9
jabolka 7 null
banane null 3
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
TheHijacker ::
Na pamet bi rekel da:
select a.*,b.* from tabelaA a
left join tabelaB b on (a.artikel = b.artikel)
če je prva kolona artikel in druga kolicina.
select a.*,b.* from tabelaA a
left join tabelaB b on (a.artikel = b.artikel)
če je prva kolona artikel in druga kolicina.
http://www.google.si
Zgodovina sprememb…
- spremenil: TheHijacker ()
Poldi112 ::
Hijacker, tvoj query vrne:
koda kolicina koda kolicina
hruske 5 hruske 9
jabolka 7 null null
koda kolicina koda kolicina
hruske 5 hruske 9
jabolka 7 null null
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
BigWhale ::
(select sadje, if(1,NULL,kol) as kolA, kol as kolB from b) union all (select sadje, kol, null from a);
Tole bo verjetno blizje... Tinker with it a little...
Tole bo verjetno blizje... Tinker with it a little...
Poldi112 ::
To je ze blizje, samo mi za isto kodo (hruske) vrne 2 razlicna zapisa, ki bi ju jaz rabil v eni vrstici:
+---------+------+------+
| koda | kolA | kolB |
+---------+------+------+
| hruske | NULL | 9 |
| banane | NULL | 3 |
| hruske | 5 | NULL |
| jabolka | 7 | NULL |
+---------+------+------+
(select sadje, if(1,NULL,kol) as kolA, kol as kolB from b) union all (select sadje, kol, null from a);
+---------+------+------+
| koda | kolA | kolB |
+---------+------+------+
| hruske | NULL | 9 |
| banane | NULL | 3 |
| hruske | 5 | NULL |
| jabolka | 7 | NULL |
+---------+------+------+
(select sadje, if(1,NULL,kol) as kolA, kol as kolB from b) union all (select sadje, kol, null from a);
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Zgodovina sprememb…
- spremenil: Poldi112 ()
BigWhale ::
Ce ugotovis, kako nardit distinct select uniona, potem je to to. Sicer pa lahko to potem zdruzis. Druga resitev bi bila s subselecti, ki pa jih ne podpira vsak mysql.
Ce res hoces, lahko se tole potreniram... ;)
Ce res hoces, lahko se tole potreniram... ;)
Poldi112 ::
No, zelel bi ze, ampak ce ne znas na pamet se bom sam malo trudil. Vsaj vem kje iskati tako da tnx. Ceprav je ze ta prejsnji query precej heavy zame in moram se pogruntat kako sploh dela.
Edit: Dela :)
Sicer bo malo problema ker je vsake toliko casa ista koda v eni tabeli, ampak to lahko pocaka na mysql 4.1.
select testA.koda,testA.kolicina as kolA, testB.kolicina as kolB from testA left join testB on testA.koda=testB.koda union select
testB.koda,testA.kolicina as kolA, testB.kolicina as kolB from testB left join testA on testB.koda=testA.koda;
+---------+------+------+
| koda | kolA | kolB |
+---------+------+------+
| hruske | 5 | 9 |
| jabolka | 7 | NULL |
| banane | NULL | 3 |
+---------+------+------+
Edit: Dela :)
Sicer bo malo problema ker je vsake toliko casa ista koda v eni tabeli, ampak to lahko pocaka na mysql 4.1.
select testA.koda,testA.kolicina as kolA, testB.kolicina as kolB from testA left join testB on testA.koda=testB.koda union select
testB.koda,testA.kolicina as kolA, testB.kolicina as kolB from testB left join testA on testB.koda=testA.koda;
+---------+------+------+
| koda | kolA | kolB |
+---------+------+------+
| hruske | 5 | 9 |
| jabolka | 7 | NULL |
| banane | NULL | 3 |
+---------+------+------+
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Zgodovina sprememb…
- spremenil: Poldi112 ()
BigWhale ::
Bi moral pritisnit refresh preden sem spesnil tole, no ampak vseeno.
SELECT DISTINCT tbl.sadje, (SELECT a.kol FROM a WHERE a.sadje=tbl.sadje) AS kolA, (SELECT b.kol FROM b WHERE b.sadje=tbl.sadje) AS kolB FROM (SELECT b.sadje, IF(1,NULL,b.kol) AS kolA, b.kol AS kolB FROM b UNION SELECT a.sadje, a.kol, NULL FROM a) AS TBL ORDER BY sadje;
Tole bo delalo v mysql 4.1 Ce se ti podvajajo kode, potem, predvidevam, da jih sestevas, popravi vse stiri subselecte, da grupirajo po kodi in vracajo SUM(kolicina).
SELECT DISTINCT tbl.sadje, (SELECT a.kol FROM a WHERE a.sadje=tbl.sadje) AS kolA, (SELECT b.kol FROM b WHERE b.sadje=tbl.sadje) AS kolB FROM (SELECT b.sadje, IF(1,NULL,b.kol) AS kolA, b.kol AS kolB FROM b UNION SELECT a.sadje, a.kol, NULL FROM a) AS TBL ORDER BY sadje;
+---------+------+------+ | sadje | kolA | kolB | +---------+------+------+ | banane | 7 | NULL | | hruske | 5 | 8 | | jabolka | NULL | 2 | +---------+------+------+
Tole bo delalo v mysql 4.1 Ce se ti podvajajo kode, potem, predvidevam, da jih sestevas, popravi vse stiri subselecte, da grupirajo po kodi in vracajo SUM(kolicina).
Poldi112 ::
Malo studiram da bi jih sestel kar pred vnosom v bazo. Itak jih vnasam iz csv tako da to ne predstavlja problema.
Tnx.
Tnx.
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | TSQL rekurzivnoOddelek: Programiranje | 922 (661) | hamez66 |
» | MySQL izpis vsebine iz dveh tabelOddelek: Programiranje | 1204 (1092) | iMark |
» | [SQL] Razlika 2 množicOddelek: Programiranje | 1893 (1702) | c00L3r |
» | T-SQL preprost querry pa ne znamOddelek: Programiranje | 1835 (1492) | borchi |
» | Malce zahtevnejši SQL stavek včasih narobe SELECT-aOddelek: Izdelava spletišč | 2162 (1831) | Brilko |