Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] dubbele JOIN in JOIN clause?

Pagina: 1
Acties:

  • Maddog McHare
  • Registratie: Maart 2005
  • Laatst online: 19-01 00:38

Maddog McHare

ROCK AND STONE!

Topicstarter
Beste Tweakers,

Van een bestaande query (Niet door mijzelf gemaakt) probeer ik onderstaande JOIN te begrijpen.

[code=sql,0,5,0]
FROM dbo.PRO INNER JOIN dbo.PRO AS PRO_3
INNER JOIN dbo.PRO AS PRO_1
ON PRO_3.PRO_ID = PRO_1.PRO_PRO_ID_PARENT
INNER JOIN dbo.PRO AS PRO_2
ON PRO_1.PRO_ID = PRO_2.PRO_PRO_ID_PARENT
INNER JOIN dbo.PRJ
ON PRO_2.PRO_PRJ_ID = dbo.PRJ.PRJ_ID
ON dbo.PRO.PRO_ID = PRO_3.PRO_PRO_ID_PARENT
[/code=sql]

Van wat ik begrepen heb ziet een join van andere tabellen (of dezelfde tabel met alias) er altijd uit als
<tbl_1> JOIN <tbl_2> ON <tbl_1.kolom> = <tbl_2.kolom>
<tbl_1> JOIN <tbl_3> ON <tbl_1.kolom> = <tbl_3.kolom>
etc.

Hoe wordt in de eerste regel dan de link gemaakt tussen tabel PRO en tabel PRO_3? Is dit dan de laaste "ON" regel?

M@Dd09


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 21:44
Er wordt met keyword AS een aantal aliassen / referenties (PRO_1 en PRO_3) gemaakt naar de tabel dbo.PRO. Vervolgens kun je die aliassen gebruiken in het ON-statement. Hier wordt de tabel dbo.PRO dus met zichzelf gejoined op te kolommen PRO_ID en PRO_PRO_ID_PARENT.

Of bedoel je dat niet?

[ Voor 20% gewijzigd door Morrar op 24-09-2014 13:34 ]


  • Mike78
  • Registratie: September 2000
  • Laatst online: 21:31

Mike78

Always

Dat gebeurt in de laatste regel in je voorbeeld:
[code=sql,0,5,0]
ON dbo.PRO.PRO_ID = PRO_3.PRO_PRO_ID_PARENT
[/code=sql]

[ Voor 13% gewijzigd door Mike78 op 24-09-2014 13:35 ]

24 uur per dag, 24 biertjes in een krat. Toeval?


  • Maddog McHare
  • Registratie: Maart 2005
  • Laatst online: 19-01 00:38

Maddog McHare

ROCK AND STONE!

Topicstarter
Nee niet precies, er wordt een join gemaakt met dbo.PRO PRO_3 en vervolgens PRO_1 zonder de "ON"te gebruiken?!

M@Dd09


  • Maddog McHare
  • Registratie: Maart 2005
  • Laatst online: 19-01 00:38

Maddog McHare

ROCK AND STONE!

Topicstarter
@Mike78

Dat dacht ik al maar waarom zou voor deze manier van weergave gekozen zijn? Zit hier een vorm van selectieviteit in dan?

M@Dd09


  • Mike78
  • Registratie: September 2000
  • Laatst online: 21:31

Mike78

Always

Dat bepaalt je database, volgens mij maakt het niet uit.

24 uur per dag, 24 biertjes in een krat. Toeval?


  • Maddog McHare
  • Registratie: Maart 2005
  • Laatst online: 19-01 00:38

Maddog McHare

ROCK AND STONE!

Topicstarter
Dat bepaalt je database, volgens mij maakt het niet uit.
Ok weer wat geleerd, ik dacht dat na een JOIN altijd de "ON" moest volgen, blijkbaar dus niet.

Thnx

[ Voor 32% gewijzigd door Maddog McHare op 24-09-2014 13:41 ]

M@Dd09


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Zet maar eens haakjes, dan zie je het:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
FROM
  (dbo.PRO)
  INNER JOIN
  (
    (((dbo.PRO AS PRO_3) 
    INNER JOIN (dbo.PRO AS PRO_1) 
    ON PRO_3.PRO_ID = PRO_1.PRO_PRO_ID_PARENT) 
    INNER JOIN (dbo.PRO AS PRO_2) 
    ON PRO_1.PRO_ID = PRO_2.PRO_PRO_ID_PARENT) 
    INNER JOIN (dbo.PRJ)
    ON PRO_2.PRO_PRJ_ID = dbo.PRJ.PRJ_ID
  )
  ON dbo.PRO.PRO_ID = PRO_3.PRO_PRO_ID_PARENT

[ Voor 4% gewijzigd door Infinitive op 24-09-2014 14:09 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Maddog McHare
  • Registratie: Maart 2005
  • Laatst online: 19-01 00:38

Maddog McHare

ROCK AND STONE!

Topicstarter
@Infinitive

Hadden die er gestaan, dan had ik het begrepen maar het feit dat ze er niet hoeven te staan is juist hetgeen wat bij mij verwarring gaf. Er zit dus geen selectiviteit in de JOINS daarom zijn haakjes dus niet nodig (maar maakt het wel leesbaarder) .

M@Dd09

Pagina: 1