webForumDet fria alternativet

Möjligt att "nästla" två tabeller med SQL?

Databaser & SQL

8 svar · 1 787 visningar · startad av casca

Medlem sedan feb. 20005 891 inlägg
Frågan#1

Säg att man har tabell A och B:

A innehåller t.ex information om olika idrottslag.

B innehåller individuella spelare, och har ett attribut som refererar till A's PK, för att kunna hålla reda på vilket lag en spelare tillhör.

Går det då att göra en selection med SQL, där man kan få en "utskrift" med lag OCH spelare i en och samma query?

Ex på struktur:

TABELL A:
-------------------------------------
| ID	| LAG	| COACH		          
-------------------------------------
| 1	| Modo	| Challe Berglund	  
-------------------------------------
| 2	| Timrå	| Per-Erik Jonsson  
-------------------------------------

TABELL B:
-------------------------------------
| ID	| SPELARE	| LAG	
-------------------------------------
| 1	| Tuomas Tarkki	| 1		
-------------------------------------
| 2	| Daniel Corso	| 2		
-------------------------------------
| 3	| Byron Ritchie	| 1		
-------------------------------------
| 4	| Anton Lander	| 2		
-------------------------------------
| 5	| Pär Styf	| 2		
-------------------------------------
| 6	| Ladislav Nagy	| 1		
-------------------------------------

Är det då öht möjligt att lyckas få till en liknande "utskrift" med SQL, alltså "nästla" tabellerna?

---------------------------------------------------------------------------------
| ID	| LAG		| COACH			| SPELARE		| LAG		
---------------------------------------------------------------------------------
| 1	| Modo		| Challe Berglund	|			|
---------------------------------------------------------------------------------
| 1	|		|			| Tuomas Tarkki		| 1		
---------------------------------------------------------------------------------
| 3	|		|			| Byron Ritchie		| 1		
---------------------------------------------------------------------------------
| 6	|		|			| Ladislav Nagy		| 1		
---------------------------------------------------------------------------------
| 2	| Timrå		| Per-Erik Jonsson	|			|
---------------------------------------------------------------------------------
| 2	|		|			| Daniel Corso		| 2		
---------------------------------------------------------------------------------
| 4	|		|			| Anton Lander		| 2		
---------------------------------------------------------------------------------
| 5	|		|			| Pär Styf		| 2		
---------------------------------------------------------------------------------

Använder Oracle Database 10g Express Edition om det gör nån skillnad.

Medlem sedan juni 20014 290 inlägg
#2

En standard Left Join kanske passar.

Medlem sedan feb. 20005 891 inlägg
#3

Nja, jag var inne på att joina tabellerna redan innan och en LEFT JOIN ger samma resultat. Helst vill jag inte att "tabell A" ska "upprepas" för varje rad från "tabell B", men det kanske inte alls går att göra så exakt...

Medlem sedan sep. 20051 758 inlägg
#4

Du har två kolumner som heter LAG. Kanske att den ena borde byta namn?

Medlem sedan juni 200032 967 inlägg
#5

casca skrev:

Nja, jag var inne på att joina tabellerna redan innan och en LEFT JOIN ger samma resultat. Helst vill jag inte att "tabell A" ska "upprepas" för varje rad från "tabell B", men det kanske inte alls går att göra så exakt...

Det känns som något att lösa i presentationen, inte i SQL. :)

Medlem sedan feb. 20005 891 inlägg
#6

b242569 skrev:

Du har två kolumner som heter LAG. Kanske att den ena borde byta namn?

Det är bara ett förenklat exempel, inte den databas jag egentligen använder.

@nders skrev:

Det känns som något att lösa i presentationen, inte i SQL. :)

Ja, visst, men det är en uppgift i en databaskurs som jag håller på med, och där finns liksom inget "gränssnitt" utan ett par "rapporter" ska genereras mha SQL. Dock verkar det inte gå att återskapa samma utskrift så då får man nöja sig med att joina tabellerna...

Medlem sedan juli 200012 978 inlägg
#7

Jag kan inte förstå, vilket jag hat påpekat tidigare i liknande fall, att tiden fattas i ett sådant exempel.
En spelare är ju inte för eviga tider bunden till ett lag! Alltså bör det finnas en koppling mellan de två tabellerna som innehåller start och slutdatum för engagemanget.
Då kan man alltid få ut aktuella laguppstäliningar också.

Medlem sedan feb. 20005 891 inlägg
#8

Lasp skrev:

Jag kan inte förstå, vilket jag hat påpekat tidigare i liknande fall, att tiden fattas i ett sådant exempel.
En spelare är ju inte för eviga tider bunden till ett lag! Alltså bör det finnas en koppling mellan de två tabellerna som innehåller start och slutdatum för engagemanget.
Då kan man alltid få ut aktuella laguppstäliningar också.

Som jag skrev innan:

casca skrev:

Det är bara ett förenklat exempel, inte den databas jag egentligen använder.

Medlem sedan juli 200012 978 inlägg
#9

O
m det är förenklat bör det ju inte vara svårt? Även tränare byter ju klubbar.
Så jag ber om ursäkt om jag slog in öppna dörrar då!!

273 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)