2014-01-09 62 views
0

使用PostgreSQL并给出以下示例表,如何选择至少有一个孩子的父母10 孩子20?仅选择包含SQL中至少包含给定元素的行

parent | child 
--------+------- 
     1 | 10 
     1 | 20 
     1 | 30 
     2 | 10 
     2 | 20 
     3 | 10 

换句话说,这是预期的结果:

parent 
-------- 
     1 
     2 

在一般情况下,我该如何选择具有至少所有给定的儿童X1X2所有家长,...,xn?什么是最有效的方法来做到这一点?

谢谢!

+0

@liszt ...您的quetsion不清楚..提供您需要的样本结果数据.. –

+1

您能否请张贴一些样本输出? – Rachcha

+0

对不起,我已经添加了预期的结果。 – liszt

回答

3
SELECT parent FROM table WHERE child IN(10,20) 
GROUP BY parent 
HAVING COUNT(DISTINCT child)>=2 

Fiddle

1

这不是完全清楚你的要价。但是,我会给它一个破解。

如果你要手动定义,你可以做一个简单的SELECT语句的孩子:

SELECT DISTINCT parent 
FROM table1 
WHERE child IN ('10', '20') 

这将选择具有10或20,因为孩子所有的父母。要添加更多,只需将该号码添加到IN()部分。

如果你想为大量的孩子或者未知数量的孩子做这件事,那么你可以创建一个临时表来存储孩子的搜索值并将它加入到你的主表中。例如:

CREATE TABLE #SearchChildren 
(
    Child int 
) 

然后将您的搜索值输入#SearchChildren。需要更多地了解你在做什么这一点。

SELECT DISTINCT a.parent 
FROM table1 as a 
JOIN #SearchChildren as s 
ON a.child = s.Child 

不知道更多关于你想要做什么很难给出完整的答案,但希望这有助于。

相关问题