2010-10-26 112 views
2

两个表在MySQL Select查询

表1

ID FileName 

1 abc 
2 abc 
3 abc 
4 xyz 

表2

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

我需要通过传递表1中的任意ID,即获取文件名请将isDeleted = 1的数为所有的值(1,2,3)的ID,我需要计数为2

我试着用以下查询

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 

这总是返回3

编辑:我需要通过从第一台传递ID来从第一个表中的文件名的计数。计数应该基于第二个表中的isdeleted列。该表由列ID(表1)和Table1_ID(表2)相关

回答

4

这给一个镜头:

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

编辑:获取文件数:

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

这总是返回零 – 2010-10-26 12:43:05

+0

@Sri请尝试更新的版本,并让我知道。 – Fosco 2010-10-26 12:43:53

+0

对不起还是会回复零 – 2010-10-26 12:55:49

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

甚至更​​简单的“选择计数(isDeleted)从表2其中Table1_ID = X和isDeleted = 1” – Roadie57 2010-10-26 12:35:33

+0

这总是返回零 – 2010-10-26 12:37:53

+0

你用什么X? – Roadie57 2010-10-26 12:53:14

0

这适用于我:

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)) 

编辑:I can看看这与福斯科的回答有何不同。