webForumDet fria alternativet

skapa hjälptabell

Databaser & SQL

5 svar · 306 visningar · startad av celia

Medlem sedan dec. 20012 532 inlägg
Frågan#1

Jag har en tabell main:

main_id (räknare)
land
.
.
.

Nu vill jag ta bort kolumnen land och lägga den i en ny tabell där varje land får ett unikt id:

land_id (räknare)
land

INSERT INTO land (land)
SELECT distinct(land) FROM main

och sedan skapa en hjälptabell main_land:

main_id
land_id

Man hämtar main_id från main och land_id från land, där main.land = land.land. Men hur ser INSERT INTO-koden ut? Kan man skriva såhär:

INSERT INTO main_land (main_id, land_id)
SELECT main.id, land.id
FROM main, land
WHERE main.land = land.land

Det verkar fungera men blir det rätt? Ska man använda INNER JOIN istället, eller är det samma sak? Flera poster i main kan ju ha samma värde på land.

INSERT INTO main_land (main_id, land_id)
SELECT main.id, land.id
FROM main
INNER JOIN land
ON main.land = land.land

Jag använder SQL Server.

Medlem sedan dec. 200012 464 inlägg
#2

Blir det rätt?

Ja.

Är det någon skillnad mellan frågorna?

Nej.

Varför en hjälptabell? Kommer en entitet i main att relateras till flera olika länder?

Medlem sedan dec. 20012 532 inlägg
#3

LarsG skrev:

Varför en hjälptabell? Kommer en entitet i main att relateras till flera olika länder?

Japp :)

Tack för hjälpen!

Medlem sedan sep. 20025 506 inlägg
#4

Egentligen borde du väl ha en till tabell mellan? För flera entiteter kan väl vara kopplade till flera länder?

Alltså: Bengt bor i Israel och ibland i Turkiet. Men i Turkiet bor även Rolf.

Personer
Namn = Bengt, ID = 1
Namn = Rolf, ID = 2

Landrelationer
uniktID = 1, personID = 1, landID = 1
uniktID = 2, personID = 1, landID = 2
uniktID = 3, personID = 2, landID = 2

Land
ID = 1, namn = Israel
ID = 2, namn = Turkiet

Eller är jag ute på cykeltur?

Medlem sedan dec. 20012 532 inlägg
#5

Du är både ute och cyklar och inte ;)

Jag har två tabeller med en hjälptabell emellan precis som du skrivit!

Medlem sedan sep. 20025 506 inlägg
#6

Oh... ;)

250 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)