0

On 2 mysql tabelit:

clients (id,name,...) client_stuff (id,client_id,name,...)

Nüüd oleks vaja kätte saada kirjed tabelist clients millel pole client_stuff tabelis ühtki kirjet.

flag

2 Answers

2

Potentsiaalselt efektiivsem võib olla see:

select c.*
from clients c
left join client_stuff c1 on c1.client_id = c.id
where c1.client_id is null

Kui client_stuff tabelis võib kliendi kohta olla mitu kirjet, siis tuleks select asemel kasutada select distinct.

Väikeste kirjete arvude puhul on join ja not exists samaväärsed, mõlemad on sisuliselt nested loop. Suurema arvu kirjete puhul pakub aga join optimiseerijale rohkem võimalusi, nt hash join või merge join. Distinct toob muidugi sisse täiendava sorteerimisetapi, mis võib selle eelise nullida.

link|flag
1

Ma ei tea, kas sain täpselt sinu küsimusest aru

select c.* from clients c where not exists(select c1.* from client_stuff c1 where c1.client_id=c.id)

link|flag
jah just seda oligi vaja, aitäh! – ptr Apr 30 at 12:25

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.