2010-11-23 4 views
0

Je ne parle pas très bien SQL et ma question est comment puis-je réécrire l'instruction suivante pour la rendre plus naturelle. Le select J'essaie d'écrire joint deux tables - "utilisateurs" et "stats" - et je connais les identifiants des utilisateurs à l'avance. C'est probablement quelque chose de très basique mais je ne suis pas encore un ninja SQL.Comment réécrire une sous-requête dans JOIN?

select 
    u.id, 
    sum(s.xxx) 
from 
    (
     select id from users where id in (100, 200, 300) 
    ) u 
    left join 
    stats s 
     on u.id = s.user_id 
group by 
    u.id 
; 

La partie qui a l'air étrange est

(
     select id from users where id in (100, 200, 300) 
    ) u 

me suggérer la bonne façon. Merci

+0

Vous n'utilisez des champs de statistiques (s) dans cette requête, pourquoi voudriez-vous l'inclure? – Leslie

+0

Vous avez raison. J'ai mal tapé: c'est «somme (s.xxx)' –

Répondre

3

C'est une façon compliquée de dire

.... WHERE id in (100,200,300)

Dans votre article WHERE.

L'ensemble pourrait être réécrite comme:

select 
    u.id, 
    sum(s.xxx) 
from 
    users u 
left join stats s 
    on s.user_id = u.id 
where u.id in (100, 200, 300) 
group by 
    u.id 
+0

Je suis désolé. Une faute de frappe. Va réparer ... C'est 'somme (s.xxx)' –

+0

@ user466619 - J'ai modifié ma requête pour cela. – JNK

+0

@JNK - il fonctionne beaucoup plus lentement sur une base de données existante avec des milliers d'utilisateurs quand il y a plusieurs identifiants connus dans l'expression IN –