2010-10-26 5 views
2

Deux tablesrequête Sélectionnez dans MySQL

Tableau 1

ID FileName 

1 abc 
2 abc 
3 abc 
4 xyz 

Tableau 2

ID Table1_ID isDeleted 
1 1  1 
2 2  1 
3 3  0 
4 4  0 

je dois obtenir le nombre de nom de fichier pour le isDeleted = 1 en passant une ID de table1, à savoir pour toutes les valeurs (1,2,3) d'ID, j'ai besoin du nombre comme 2

J'ai essayé avec la requête suivante

SELECT COUNT(t1.FileName) FROM Table1 t1 
LEFT OUTER JOIN Table1 t11 ON t1.FileName=t11.FileName 
INNER JOIN table2 t2 ON t2.Table1_ID =t1.ID AND t2.isDeleted=1 
WHERE t1.ID=X; 

X-1,2,3 

Cela renvoie toujours 3.

Edit: J'ai besoin pour obtenir le nombre du nom de la première table en passant l'ID de la première table. Le nombre doit être basé sur la colonne isdeleted dans la deuxième table. Les tables sont liées par l'ID de colonne (tableau 1) et Table1_ID (tableau 2)

Répondre

4

Donnez ce un coup:

select SUM(isDeleted) 
from Table2 
where Table1_ID in (
    select ID from Table1 
    where FileName = (select FileName 
        from Table1 
        where ID = 1) 
) 

Edit: pour obtenir le nombre de fichiers:

select count(*) 
from Table1 a 
join Table2 b on a.ID = b.Table1_ID and b.isDeleted = 1 
where a.FileName = (select FileName 
        from Table1 
        where ID = 1) 
+0

Ceci renvoie zéro toujours –

+0

@Sri Veuillez essayer la version mise à jour et faites le moi savoir. – Fosco

+0

Je suis désolé encore il renvoie zéro –

0
SELECT COUNT(t1.FileName) FROM Table1 t1 
INNER JOIN table2 t2 ON t2.Table1_ID =t1.ID AND t2.isDeleted=1 
WHERE t1.ID=X; 
+0

Ou même plus simple "Select Count (isDeleted) FROM Table2 où Table1_ID = X et isDeleted = 1" – Roadie57

+0

Cela renvoie zéro –

+0

toujours ce que vous utilisez pour X? – Roadie57

0

Cette travaille pour moi:

declare @id int 
set @id = 1 /*Or 2 or 3 or 4, etc.*/ 

select sum(isdeleted) 
from table2 
where table1_id in 
    (select id 
    from table1 
    where filename = (select filename 
         from table1 
         where id = @id)) 

Editer: Je peux Ne vois pas en quoi cela diffère de la réponse de Fosco.