[mysql] probleem met join over meerdere tabellen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Hey,

ik heb een db met wat tabellen en wil daar een query op uitvoeren. Eerst een schets:
Tabel1: product
Tabel2: box
Tabel3: location
Tabel4: prod/box
Tabel5: box/location

tabel 4 en 5 zijn dus tabellen die connecties bevatten, gewoon telkens de twee primary keys van de andere tabellen.

Nu zoeken we een product op en daar zouden we graag alle dozen van hebben en hun locaties op basis van de barcode van het product. Aangezien de barcode van het product ook de key is kan ik die tabel uitsluiten denk ik.
Het lukt me alle dozen van een bepaald product te zoeken met deze querry:
SQL:
1
select b.naam as box from box b inner join `prod/box` p on b.id = p.box WHERE p.product LIKE "00000024"


maar om dan door te gaan om in diezelfde query alle locaties ook op te zoeken dat lukt me niet, ik neem aan dat dit met een soort van subquery moet gebeuren maar dit lukt me niet, enige hulp in de juiste richting zou zeer welkom zijn.
Ik zou het theoretisch gezien kunnen doen door gewoon de resultaten van de query uit te lezen en een nieuwe query op te bouwen en lijn per lijn de locatie na te kijken maar dat zou ik liever niet doen om stappen te besparen.

Just me


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 08-09 19:03
Je kan toch met een left join er ook alle locaties bij halen? want je hebt box/location, en location.. je kan 'join op join' doorgaan he.

|>


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 10:57
Wat simon zegt dus..

SQL:
1
2
3
4
5
select ....
from tabel a
    left join tabel b on a.. = b..
    left join tabel c on b.. = c..
where a. = ..

Dus even Programming FAQ - SQL doornemen en dan gaan emt die banaan :)

Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
ok thanks :p veel simpeler dan ik dacht, mss daarom dat ik niets vond :p

SQL:
1
2
3
4
5
6
select b.naam as box, l.naam as location
from box b
inner join `prod/box` p on b.id = p.box
left join `box/location` q on q.box = b.id
left join `location` l  on l.id = q.location
WHERE p.product LIKE "00000024"


geeft me wat ik nodig heb ;)
thanks!

Just me


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Waarom gebruik je een LIKE wanneer je een exacte vergelijking doet? Een = ligt dan meer voor de hand.

Acties:
  • 0 Henk 'm!

  • TweakMDS
  • Registratie: Mei 2002
  • Laatst online: 31-08 18:44
Dat viel me ook op, bij je zou ofwel = "00000024" of LIKE '00000024%" verwachten.
(of LIKE "%00000024%", maar een wildcard aan de voorkant is meteen een red flag mbt performance).

Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Goed punt, was zo met de rest bezig dat ik daar eigenlijk niet echt over nagedacht heb.
Er komen helemaal geen wildcards want dit is al na het zoeken als er een product gekozen is en de barcode dus al zeker bekend is. Dus een = zou inderdaad beter zijn. Thx!

Just me

Pagina: 1