webForumDet fria alternativet

lista ur 2 tabeller

6 svar · 277 visningar · startad av henrikjohansson

henrikjohanssonMedlem sedan maj 2000360 inlägg
#1

Jag har 2 tabeller

en med ID och Nummer
och en med ID och 2 Nummer
:D

Saken är den att i ena ligger en komplett lista och i den andra en lista över vissa av värderna i den första tabellen..

Typ

Tabell 1

ID Nummer
1 1
2 3
3 5
4 8
5 19
6 32

osv.

och tabell 2
ID Nummer
1 1
2 3
3 8
4 32

Jag vill lista ALLA i Tabel 1 som inte finns i Tabell 2
Hur gör man det lättast? (utan att slå ihop tabellerna)

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select t1.* 
from t1 left join t2 
on t1.nummer = t2.nummer
where t2.nummer is null
henrikjohanssonMedlem sedan maj 2000360 inlägg
#3

aha :D skall testa

aasahMedlem sedan mars 20034 471 inlägg
#4

Re: lista ur 2 tabeller

henrikjohansson skrev:

Jag har 2 tabeller

en med ID och Nummer
och en med ID och 2 Nummer
:D

Saken är den att i ena ligger en komplett lista och i den andra en lista över vissa av värderna i den första tabellen..

Typ ....

Dina exempeltabeller stämmer inte med något av detta? :q Tabell 2 har två kolumner, inte tre. Dessutom finns det värden i tabell 2 som inte finns i tabell 1, och det stämmer inte med att den andra tabellen innehåller en del av värdena i den första... Vad menar du egentligen? :q

LarsG skrev:

select t1.*
from t1 left join t2
on t1.nummer = t2.nummer
where t2.nummer is null

Kan du förklara vad du gör? :q
Jag tycker det ser ut som att du gör en join över null-värden?!?
t2.nummer ska vara null och lika med t1.nummer. ==> Både t1s och t2s nummer kolumn ska vara null? Varför? Det verkar ju inte finnas några null-värden i tabellen? :q

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Om man enbart tar frågan utan where-villkor så får man

t1.ID t1.Nummer t2.id t2.nummer
1 1 1 1
2 3 2 3
3 5 <null> <null>
4 8 3 8
5 19 <null> <null>
6 32 4 32

och efter det att where-villkoret evaluerats blir det

t1.ID t1.Nummer t2.id t2.nummer
3 5 <null> <null>
5 19 <null> <null>

dvs de nummer som finns i t1 men inte i t2.

Normalt sett brukar man skriva en sådan fråga som

select * from t1 where nummer not in (
select nummer from t2)

men det stöds inte av Mysql. Varianten med en outer join är inte ekvivalent men ger oftast samma resultat.

aasahMedlem sedan mars 20034 471 inlägg
#6

Tack, LarsG! :)

Finns det inte stöd för mängdoperatorer heller? Dvs funkar inte följande:

Select * from tabell1
except
Select * from tabell2;
?

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Nej. (Det är ganska få DBMS som har stöd för except.)

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)