11

私は次のようにテーブルを設定しています:

Parent
------
id, ...

Child
-----
id, parent_id, x, y

特定のparent_idを含むChildのすべての行が、xとy(私の場合はx = y)を含む基準を満たしている場合は、Parentsまたは個別のparent_idを見つけたいと思います。

例えば:

Parent
------
id
 1
 2
 3

Child
id, parent_id, x, y
1,      1,     2, 3
2,      1,     3, 4
3,      2,     5, 5
4,      2,     6, 7
5,      3,     8, 8
6,      3,     9, 9

結果は3になります。現在、いずれかの子が基準を満たしているparent_idsを見つけるクエリがあります。次に、それを使用してそれらのレコードを取得し、すべての子が基準を満たしているかどうかをコードでチェックします。サンプルデータを使用して、parent_id 2と3を取得し、すべての子を持つ2つの親レコードを取得して、評価します。可能であれば、単一のクエリでこれを実行したいと思います。

4

3 に答える 3

24

使用できますNOT EXISTS

SELECT id 
FROM Parent p
WHERE NOT EXISTS
(
   SELECT 1 FROM Child c
   WHERE c.parent_Id = p.id
   AND c.x <> c.y
)

編集:これがsql-fiddleです:http ://sqlfiddle.com/#!3/20128/1/0

于 2012-08-22T14:17:21.457 に答える
1

これはあなたが必要なものですか?

  select id from parent where id not in(
    select parent_id from child 
    where x<>y
    group by parent_id)
于 2012-08-22T14:17:25.713 に答える
1

親には満足する子供がいないため、最初に2つのテーブルを結合する必要があります

そして、pa_id列のインデックスを追加する必要があります

SELECT DISTINCT pa.id 
FROM pa INNER JOIN c ON c.pa_id = pa.id 
WHERE NOT EXISTS ( SELECT 1 FROM c WHERE c.parent_Id = p.id and c.x <> c.y )
于 2017-03-24T11:22:08.827 に答える