webForumDet fria alternativet

Få fram poster som inte matchar någon annan

Databaser & SQL

9 svar · 347 visningar · startad av Troxy

Medlem sedan mars 20041 505 inlägg
Frågan#1

Hej,

Jag har två tabeller. Posterna i de olika tabellerna länkas samman med kollumnen "accountid", en kollumn som finns i båda tabellerna.

Nu är det så att tabell A innehåller vissa poster där dess "accountid" inte matchar med någon post i tabell B.

Jag vill nu få fram dessa poster ur tabell A. Hoppas ni kan hjälpa mig!

Medlem sedan juni 200032 967 inlägg
#2
SELECT * FROM tabellA WHERE NOT accountID IN (SELECT accountID FROM tabellB)

Så länge vi inte pratar om någon uråldrig version av MySQL alltså.

Medlem sedan mars 20041 505 inlägg
#3

Tack så mycket, jag ska testa den direkt.

Btw, servern jag kör mot använder MySQL 4.0.24, den är väl ganska ny?

EDIT: Hm...jag får inte till det. Såhär ser frågan ut:

SELECT * FROM tblaccounts WHERE NOT accountid IN (SELECT accountid FROM tblaccountowner)

Och detta får jag tillbaka:

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT accountid FROM tblaccountowner)' at line 1

Medlem sedan juni 200032 967 inlägg
#4

MySQL 4.0.24 betecknas nog som uråldrig.

Varför inte uppgradera? Subqueries (som används i exemplet ovan) är mycket användbara, och stöds från och med version 4.1.

Medlem sedan mars 20041 505 inlägg
#5

Hehe, okej, då är det alltså versionen som är gammal! :e

Jag får ta och ringa serverkillen och be honom uppgradera.

Medlem sedan juni 200032 967 inlägg
#6

Annars kan man ju skriva om det till en join:

SELECT tabellA.* FROM tabellA 
LEFT JOIN tabellB ON tabellA.accountID = tabellB.accountID 
WHERE tabellB.någotfält IS NULL
Medlem sedan mars 20041 505 inlägg
#7

Tack så mycket för hjälpen. Jag testar denna fråga också.

Detta löser sig nog prima efter en uppgradering av mysql-drivern.

Medlem sedan juni 200032 967 inlägg
#8

De två frågorna i sig bör alltså ge exakt samma resultat, så av just denna anledning krävs inte uppgradering.

Det finns dock ingen anledning att inte uppgradera. :)

Medlem sedan juli 20011 084 inlägg
#9

@nders: Finns det någon prestandavinst i någon av metoderna? Eller är de fullt likvärdiga? Det vill säga Subqueries vs. JOIN?

Medlem sedan juni 200032 967 inlägg
#10

mozilla skrev:

Finns det någon prestandavinst i någon av metoderna?

Jag har ärligt talat inte en aning. Om någon har tillgång till MySQL så är det bara att testa att köra frågorna med. Jag tvivlar dock på att det skulle vara någon större skillnad.

mvh

274 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)