[SQL] Join gebruiken

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Ik krijg hier volgende tabelstructuur voorgeschoteld:

TRANSPORT
--------------------
id,
description,
from_address,
to_address,
...

ADDRESS
----------------
id,
name,
address,
city

Nu zou ik graag voor iedere transport die ik uit de DB ophaal, 2 results terugkrijgen, beide met een ander address. Dus ook indien from_address, to_address (intern transport) hetzelfde is. Maar met volgende query:
SQL:
1
2
3
4
5
6
SELECT tp.id, tp.transportDate, tp.description, tp.from_address, 
tp.to_address, adr.name, adr.address, adr.city
FROM transport TP, address ADR
WHERE TP.transportDate = TO_DATE('27-OKT-05')
AND (tp.from_address = adr.id OR tp.to_address = adr.id)
ORDER BY tp.id


Krijg ik dit terug
code:
1
2
3
1 - "test" - 1 - 1 - "SiteA" - "Dorpsstraat 34" - "Stad"
2 - "test2" - 1 - 1 - "SiteA" - "Dorpsstraat 34" - "Stad"
2 - "test2" - 1 - 2 - "SiteB" - "Kerkstraat 22" - "Stad"


Terwijl ik graag volgende teruggekregen had:
code:
1
2
3
4
1 - "test" - 1 - 1 - "SiteA" - "Dorpsstraat 34" - "Stad"
1 - "test" - 1 - 1 - "SiteA" - "Dorpsstraat 34" - "Stad"
2 - "test2" - 1 - 1 - "SiteA" - "Dorpsstraat 34" - "Stad"
2 - "test2" - 1 - 2 - "SiteB" - "Kerkstraat 22" - "Stad"


Heb al een hoop liggen pielen met joins maar geraak er maar niet uit :?

edit:
on request, tabelnamen in lowercase

[ Voor 78% gewijzigd door -FoX- op 27-10-2005 13:01 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Heb je maar 2 adressen in ADDRESS staan? Dat is wel even van belang om te weten

Oops! Google Chrome could not find www.rijks%20museum.nl


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Nee, daar zullen er zeker meerderen in voorkomen. Iig meer dan 2

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 25-04 21:17

curry684

left part of the evil twins

Doe jezelf een plezier en leer die deprecated join-syntax zo snel mogelijk af, die maakt het niet helderder. Schrijf het dus gewoon voluit, want zelfs ik heb nu geen idee hoe je zit te joinen in die query van je. En noteer daarnaast ajb de tabelnamen camel- of Pascalcased in je query, want alles in caps maakt het nog onleesbaarder.

edit:
bliep nm the edit ik word oud en scheel

[ Voor 30% gewijzigd door curry684 op 27-10-2005 12:59 ]

Professionele website nodig?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
-FoX- schreef op donderdag 27 oktober 2005 @ 12:54:
Nee, daar zullen er zeker meerderen in voorkomen. Iig meer dan 2
Hmm, bedankt, maar was toch niet nuttig 8)7

Het is veel simpeler als ik dacht, ik dacht dat een veld soms leeg was, maar dat is niet zo vermoed ik nu.

SQL:
1
2
3
4
SELECT tp.id, tp.transportDate, tp.description, From_addr.Address as FromAddress, To_addr.Address as ToAddress
FROM Transport TP
LEFT OUTER JOIN Address From_Addr ON TP.from_address = From_Addr.Id
LEFT OUTER JOIN Address To_Addr ON TP.to_address = To_addr.Id


Gewoon 2x de tabel joinen

[ Voor 48% gewijzigd door P_de_B op 27-10-2005 13:06 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

En waar koppel je het adres aan het transport?
SQL:
1
2
3
4
5
SELECT TP.ID, TP.TRANSPORT_DATE, TP.DESCRIPTION, TP.FROM_ADDRESS, 
TP.TO_ADDRESS, ADR.NAME, ADR.ADDRESS, ADR.CITY 
FROM TRANSPORT TP, ADDRESS ADR
WHERE TRANSPORT_DATE = TO_DATE('27-OKT-05')
ORDER BY TP.ID


Je moet voor 2 adressen nog wel 2 keer joinen:
SQL:
1
2
3
4
5
6
7
SELECT TP.ID, TP.TRANSPORT_DATE, TP.DESCRIPTION, TP.FROM_ADDRESS, 
TP.TO_ADDRESS, ADR1.NAME, ADR1.ADDRESS, ADR1.CITY,ADR2.NAME, ADR2.ADDRESS, ADR2.CITY  
FROM TRANSPORT TP, ADDRESS ADR1, ADDRESS ADR2
WHERE TRANSPORT_DATE = TO_DATE('27-OKT-05')
AND TP.FROM_ADDRESS = ADR1.ID
AND TP.TO_ADDRESS = ADR2.ID
ORDER BY TP.ID


Maar wacht, je wilt 2 rows, met TO en FROM adress_id en dan de gegevens van from OF to ?? :? :?

[ Voor 3% gewijzigd door bartware op 27-10-2005 13:04 . Reden: code=SQL ]

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

SQL:
1
2
3
4
5
6
7
SELECT [reut]
FROM TRANSPORT TP, ADDRESS ADR_From, ADDRESS ADR_To
WHERE TRANSPORT_DATE = TO_DATE('27-OKT-05')
   AND (TP.FROM_ADDRESS = ADR_From.ID)
   AND (TP.TO_ADDRESS = ADR_To.ID)
   AND (TP.FROM_ADDRESS <> TP.TO_ADDRESS)
ORDER BY TP.ID

Je wilt twee adressen zien, dan moet je er ook twee selecteren!

Siditamentis astuentis pactum.


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
Varienaja schreef op donderdag 27 oktober 2005 @ 13:02:
SQL:
1
2
3
4
5
6
7
SELECT [reut]
FROM TRANSPORT TP, ADDRESS ADR_From, ADDRESS ADR_To
WHERE TRANSPORT_DATE = TO_DATE('27-OKT-05')
   AND (TP.FROM_ADDRESS = ADR_From.ID)
   AND (TP.TO_ADDRESS = ADR_To.ID)
   AND (TP.FROM_ADDRESS <> TP.TO_ADDRESS)
ORDER BY TP.ID

Je wilt twee adressen zien, dan moet je er ook twee selecteren!
Juist |:(
Bedankt voor de muur :)
Pagina: 1