» »

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.
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------

Ziga Dolhar ::

Nisem prepričan, če te razumem; bi OUTER join pomagal?
Legal systems are not supposed to be efficient. They are
designed to ensure that innocent people are not found guilty.
If that requires inefficiencies, so be it.

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
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------

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.
http://www.google.si

Zgodovina sprememb…

Poldi112 ::

Hijacker, tvoj query vrne:

koda kolicina koda kolicina
hruske 5 hruske 9
jabolka 7 null null
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------

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...

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);
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------

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... ;)

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 |
+---------+------+------+
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------

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;

+---------+------+------+
| 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.
-------------------------------------------------
Nočem foto avatarja. Hočem risan avatar.
-------------------------------------------------


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

50 ccm

Oddelek: Loža
455646 (3299) Formula 1
»

SQL poizvedba

Oddelek: Programiranje
151255 (765) borchi
»

T-SQL preprost querry pa ne znam

Oddelek: Programiranje
17937 (594) borchi
»

[MY SQL] problem

Oddelek: Izdelava spletišč
5548 (473) BigWhale
»

SQL problem

Oddelek: Programiranje
9762 (599) Bossek

Več podobnih tem