2017-04-12 13 views
4

は私がタイトルに苦労しますが、私が説明しましょう:ParentChild選択両親

はのは、私は2つのデータ構造を持っているとしましょう。私の(Scala)コードでは、各ParentインスタンスはChildのリストを持っています。データベースには私はParentChildの2つのテーブルがあります。 Childテーブルの各エントリには、Parentを指す値parentIdがあります。

Parent表:Childのid int型
表:Child IDのリストを指定したid int型、PARENTID int型(外部キーparent.id)

、私は(そこに缶の各Parentを選択します何もない、1つ、または多くの)子供たちがいます。誰かが質問に私を助けることができますか?

UPDATE:

私の例私のユースケースをカバーしていない - 申し訳ありません。別のフィールドを追加する必要がありますChildinterestingThingとしましょう。

CREATE TABLE Parent (
    id    INT PRIMARY KEY 
); 
CREATE TABLE Child (
    id    INT PRIMARY KEY, 
    interestingThing INT, 
    parentId   INT, 
    FOREIGN KEY (parentId) REFERENCES Parent (id) 
); 

私が必要とするのは、面白いもののリストを持つ子供を持つ両親を見つけることです。このデータを考える:

INSERT INTO Parent VALUES (1); 
INSERT INTO Parent VALUES (2); 

INSERT INTO Child VALUES (1, 42, 1); 
INSERT INTO Child VALUES (2, 43, 1); 
INSERT INTO Child VALUES (3, 44, 1); 
INSERT INTO Child VALUES (4, 8, 2); 
INSERT INTO Child VALUES (5, 9, 2); 
INSERT INTO Child VALUES (6, 10, 2); 
INSERT INTO Child VALUES (7, 8, 1); 

私が働いてこれらの例を取得するクエリをしたい:面白いこと(42、43)が与えられ

  • 、私はIDが1
  • を持つ親を見つけたいです
  • 興味深いことに(43,44)、私はid 1の親を見つけたいと思っています。
  • 興味深い事柄(8)が与えられれば、id 1の親とid 2の親を見つけたいと思います。
  • estingもの(8、10)が、私は2
+2

いくつかのサンプル・テーブル・データを追加し、予想結果 - 書式付きテキスト現在のクエリの試行も表示してください。また、使用しているdbmsにタグを付けます。 – jarlh

+0

ありがとうございます。しましょう。 – L42

答えて

2

あなたはparent.idのためのすべてのinterestingThingの配列を取得し、@>を使用するようにARRAY_AGG機能を使用することができます(含まれている)演算子:

SELECT p.id 
FROM parent p 
INNER JOIN child c 
    ON p.id = c.parentId 
GROUP BY p.id 
HAVING ARRAY_AGG(interestingThing) @> '{8}'; 

┌────┐ 
│ id │ 
├────┤ 
│ 1 │ 
│ 2 │ 
└────┘ 
(2 rows) 

SELECT p.id 
FROM parent p 
INNER JOIN child c 
    ON p.id = c.parentId 
GROUP BY p.id 
HAVING ARRAY_AGG(interestingThing) @> '{8,10}'; 

┌────┐ 
│ id │ 
├────┤ 
│ 2 │ 
└────┘ 
(1 row) 
+1

素晴らしい!ありがとうございました :) – L42

0

あなたはこの

select parentId 
from Child 
where id in (/* your list */) 
group by parentId 
having count(distinct id) = /* your list's length */ 

ようなものであなたは、カウントを持っているだけで両親を取得することを行うことができますidを持つ親を見つけたいですあなたのリストの長さに等しい子供のうち、望みの子どもとそれぞれを1回だけ考慮に入れてください。

+0

お返事ありがとうございます! 'あなたの(私のリスト)のどこにparentIdがあるのですか?また、私はこれを変更して、親が私のリストにない子供をもっと多く持つことができるようにする方法はありますか? – L42

+0

いいえ、私が書いたことを意味します:)あなたが記述した変更の解決策について考えてみましょう –

+0

ありがとうございました。私の更新された質問を参照してください - 私の最初の質問は私のユースケースをカバーしていませんでした。 – L42