2015-02-05 108 views
0

我很新的SQL。我试图编写一个查询,它将抓取与单个查询中的查找记录共享值的关联记录。相关记录

例如下面,如果一个记录有一个“否”的话,我希望它来,然后返回共用一个“信”

 
Letter;Present 
A;Yes 
A;No 
A;Yes 
B;Yes 
B;Yes 
B;Yes 

返回所有记录:

 
Letter;Present 
A;Yes 
A;No 
A;Yes 

回答

0

您将需要使用子查询为..

SELECT a.letter, a.present 
FROM yourTable a 
WHERE a.letter IN (SELECT letter 
        FROM yourTable 
        WHERE present = 'No'); 

你在这里做什么是选择所有的信件,其中present = 'NO'那么你只需重新选择从群里你的信是在包含No的字母列表。

换句话说,子查询是一个过滤器。

0

您可以使用EXISTS条款:

SELECT * 
FROM yourTable t1 
WHERE EXISTS (SELECT 1 
       FROM yourTable t2 
       WHERE t1.Letter = t2.Letter 
       AND t2.Present = 'No') 

子查询将得到与每个记录。
主查询将获得与子查询结果共享Letter值的每条记录。

1

使用子查询来查找那些无字母。然后搜索值中第一个字符在找到的没有字母的行。

select * from table 
where letter in (select letter from table where present = 'No'); 
+0

这可能不适用于区分大小写的DBMS,OP的过滤器值是'否'而不是'否' – 2015-02-05 14:24:28

+0

糟糕,没有注意到。也许这是一个不区分大小写的排序规则? (无论如何编辑,谢谢!) – jarlh 2015-02-05 14:35:01

+0

不客气:)删除了downvote。 – 2015-02-05 14:35:25