我很新的SQL。我试图编写一个查询,它将抓取与单个查询中的查找记录共享值的关联记录。相关记录
例如下面,如果一个记录有一个“否”的话,我希望它来,然后返回共用一个“信”
Letter;Present A;Yes A;No A;Yes B;Yes B;Yes B;Yes
返回所有记录:
Letter;Present A;Yes A;No A;Yes
我很新的SQL。我试图编写一个查询,它将抓取与单个查询中的查找记录共享值的关联记录。相关记录
例如下面,如果一个记录有一个“否”的话,我希望它来,然后返回共用一个“信”
Letter;Present A;Yes A;No A;Yes B;Yes B;Yes B;Yes
返回所有记录:
Letter;Present A;Yes A;No A;Yes
您将需要使用子查询为..
SELECT a.letter, a.present
FROM yourTable a
WHERE a.letter IN (SELECT letter
FROM yourTable
WHERE present = 'No');
你在这里做什么是选择所有的信件,其中present = 'NO'
那么你只需重新选择从群里你的信是在包含No
的字母列表。
换句话说,子查询是一个过滤器。
您可以使用EXISTS
条款:
SELECT *
FROM yourTable t1
WHERE EXISTS (SELECT 1
FROM yourTable t2
WHERE t1.Letter = t2.Letter
AND t2.Present = 'No')
子查询将得到与每个记录。
主查询将获得与子查询结果共享Letter
值的每条记录。
使用子查询来查找那些无字母。然后搜索值中第一个字符在找到的没有字母的行。
select * from table
where letter in (select letter from table where present = 'No');
这可能不适用于区分大小写的DBMS,OP的过滤器值是'否'而不是'否' – 2015-02-05 14:24:28
糟糕,没有注意到。也许这是一个不区分大小写的排序规则? (无论如何编辑,谢谢!) – jarlh 2015-02-05 14:35:01
不客气:)删除了downvote。 – 2015-02-05 14:35:25