MySQL单表子查询

时间:2015-02-13 09:32:43

标签: mysql subquery

我有一个问题,我希望用col5=2206取一个表中的所有行,然后选择col2和col3包含与col5相同的col2和col3组合的所有其他行(fi.in下面的例子col2 = 2,col3 = 6)

我还希望将返回的行过滤为col5中具有特定值的那些行(fi.col5 = 4000)。

('101', '2', '6', '2009-12-31', '2206', 'Exempt', '0', '0', '0', '4', '5'),  
('102', '2', '6', '2009-12-31', '4000', 'Exempt', '-1', '0', '0', '4', '5'),  
('103', '2', '6', '2009-12-31', '1200', '', '1', '0', '0', '4', '5');

我尝试了各种子查询语句。但是不能像在一张桌子上那样得到任何东西。这是可能的还是我需要创建一个更大的脚本。

3 个答案:

答案 0 :(得分:1)

您使用自我联接来实现您想要的目标。

 Select t2.*
   From table t1
   Join table t2 on ( t2.col2 = t1.col2 and t2.col3 = t1.col3 )
  Where t1.col5 = '2206'
    And t2.col5 <> '2206' -- replace that with specific filters like t2.col5 = '4000'
      ;

答案 1 :(得分:0)

最好你应该使用JOINS,但是你需要子查询然后你可以试试这个:

select a.* from table a where 
a.col2 in (select col2  from table  where col5=a.col5) 
and 
a.col3 in (select col3  from table  where col5=a.col5) 
and a.col5=4000;

答案 2 :(得分:-1)

我建议您使用后端代码而不是SQL来执行此操作,因为它可能会给您带来性能问题。