如何从sql中的sql查询结果中过滤数据

时间:2014-07-31 07:15:05

标签: mysql sql sql-server tsql

我有一个SQL查询

SELECT MenuID,
       Text,
       ParentID,
       Refcode  
FROM Menu E1 
WHERE E1.RefCode IN (0,50,51,60,63,57)   

它将生成结果集

MenuID      Text                                               ParentID    Refcode
----------- -------------------------------------------------- ----------- ----------
1           Product                                            NULL        0         
2           Applications                                       NULL        0         
3           Document                                           NULL        0         
4           Support                                            NULL        0         
6           Background                                         1           0         
7           Details                                            1           50        
8           Mobile Device                                      2           51        
12          Performance Tests                                  2           0         
15          FAQ                                                4           57        
18          InternetRestrictions                               6           60        
21          Modem Results                                      12          63        

我需要另一个减少结果的查询,即我需要删除所有没有任何子项的项所以在预期的结果中,必须删除带有menuid 3的项目,因为它有没有任何孩子,我如何使用关于第一次查询的结果或更改第一个查询的另一个查询来实现此结果集

2 个答案:

答案 0 :(得分:2)

您可以使用EXISTS

SELECT Menuid, 
       Text, 
       Parentid, 
       Refcode 
FROM   Menu E1 
WHERE  E1.Refcode IN ( 0, 50, 51, 60, 63, 57 ) 
AND EXISTS
(
    SELECT 1 FROM Menu E2
    WHERE E2.Parentid = E1.Menuid
)

Sql-Fiddle Demo

答案 1 :(得分:0)

使用不同的联接:

SELECT DISTINCT
  E1.Menuid, 
  E1.Text, 
  E1.Parentid, 
  E1.Refcode 
FROM Menu E1
JOIN Menu E2 ON E2.Parentid = E1.Menuid
WHERE E1.Refcode IN ( 0, 50, 51, 60, 63, 57 )