代码之家  ›  专栏  ›  技术社区  ›  Gopi

在MySQL中选择查询

  •  2
  • Gopi  · 技术社区  · 14 年前

    两张桌子

    表1

    ID FileName
    
    1  abc
    2  abc
    3  abc
    4  xyz
    

    小精灵

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

    我需要通过传递表1的任何ID来获取isDeleted=1的文件名计数,即对于ID的所有值(1,2,3),我需要计数为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)和表1_ID(表2)相关。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Fosco    14 年前

    试一试:

    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)
    
        2
  •  0
  •   Andrew Carmichael    14 年前

    这对我很有用:

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

    编辑:我看不出这和Fosco的答案有什么不同。

        3
  •  0
  •   Andy Lester    14 年前
    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;