webForumDet fria alternativet

Hämta värde ur tabell 1 då villkor finns i tabell 2

Databaser & SQL

10 svar · 1 485 visningar · startad av iing9808

Medlem sedan sep. 200445 inlägg
Frågan#1

Jag har en tabell, Table1 som innehåller kolumnerna user_id (räknare, long) och customgroup (text). user_id = 1 och customgroup = Ankeborg är en av raderna. Sen har jag ytterligare en tabell, Table2, som innehåller kolumnerna mailadress (text) och table1_id (long). mailadress = kalle.anka@ankeborg@jll.se och table1_id = 1.

Jag vill nu plocka ut alla mailadresser hos de gubbar som har customgroup = Ankeborg.

Hur gör jag det?

Medlem sedan feb. 20005 891 inlägg
#2

SELECT t2.mailadress
FROM Table1 t1, Table2 t2
WHERE t2.table1_id = t1.user_id
AND t2.customgroup = 'Ankeborg';

Medlem sedan sep. 200445 inlägg
#3

Tack så mycket, jag var nog på väg över ån för det här vattnet.

Medlem sedan sep. 200445 inlägg
#4

Följdfråga, hur uppdaterar jag mailadress fälten i Table2 överallt där customgroup = Ankeborg i Table1?

Något i stil med:

Update Table2 set mailadress = '@ankeborg.se' where Table1.customgroup = 'Ankeborg'
Medlem sedan sep. 200445 inlägg
#5

Följdfråga 2, vad är det för skillnad på:

SELECT t2.mailadress 
FROM Table1 t1, Table2 t2
WHERE t2.table1_id = t1.user_id
AND t2.customgroup = 'Ankeborg';

och

SELECT table2.mailadress
FROM table1 INNER JOIN table2 ON table1.USERID = table2.table1_id
WHERE table1.customgroup ='JLL';
Medlem sedan juni 200032 967 inlägg
#6

Följdfråga, hur uppdaterar jag mailadress fälten i Table2 överallt där customgroup = Ankeborg i Table1?

Med ledning av ditt senaste inlägg hade jag gjort som följer (jag använder SQL server, jag vet inte vad du använder eller om denna syntax fungerar i andra dbms):

UPDATE t2 SET t2.mailadress = '@ankeborg.se'
FROM Table2 t2 
INNER JOIN Table1 t1
ON t1.user_id = t2.table1_id

Följdfråga 2, vad är det för skillnad på:

De två alternativen är likvärdiga och bör exekveras exakt lika.

Mvh

Medlem sedan sep. 200445 inlägg
#7

Tack för det, men jag är inte riktigt med.
Du uppdaterar mailadress i Table2, men jag saknar att endast de som har customgroup = 'Ankeborg' i Table1 ska uppdateras.

Medlem sedan juni 200032 967 inlägg
#8

Ja, förlåt, jag glömde det i koden. Det är bara att lägga till det i joinvillkoret.

UPDATE t2 SET t2.mailadress = '@ankeborg.se'
FROM Table2 t2 
INNER JOIN Table1 t1
ON t1.user_id = t2.table1_id and t1.customgroup = 'Ankeborg'
Medlem sedan sep. 200445 inlägg
#9

Det här låter kanske märkligt, men jag vet faktiskt inte vad jag har för databas i botten, jag använder mig av SQL Talk för att ansluta till databasen och det verkar inte som om den gillar inner join. Det var därför som jag ställde frågan om det var någon skillnad på SQL satserna för jag får bara den utan inner join att lira.

När jag försöker uppdatera nu med:

Update Table2, Table1 SET Table1.mailadress = @ankeborg.se where Table2.mailadress = @pigg.se and Table1.user_id = Table2.table1_id and Table1.customgroup = 'Ankeborg'

Så fungerar det på min accessdatabas som jag testar med som har samma kolumner och tabell namn, men inte på min skarpa databas som jag alltså inte vet vad det är för databas.

Får följande felmeddelande:

Update Table2, Table1 SET ...
^
Error: 00134 SQL CNO ERROR.SQL NOT FOUND LOOKING UP ERROR 00923

Den pekar på komma tecknet (pilen hamnar galet när jag klistrar in den här) som om den bara klarar en tabell i taget.

Medlem sedan juni 200032 967 inlägg
#10

Då kan du prova med en subquery.

UPDATE Table2 SET mailadress = '@ankeborg.se'
WHERE table1_id IN 
	(
		SELECT user_id FROM Table1 WHERE customgroup = 'Ankeborg'
	)
Medlem sedan sep. 200445 inlägg
#11

Så helt fantastiskt skönt, tack så oerhört mycket, klockrent!

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