17

私は単純な一対多の関係を持っています。少なくとも 1 つの子がある場合にのみ、親から行を選択したいと思います。したがって、子がない場合、親行は結果セットに返されません。

例えば。

Parent:
+--+---------+
|id|   text  |
+--+---------+
| 1|  Blah   |
| 2|  Blah2  |
| 3|  Blah3  |
+--+---------+

Children
+--+------+-------+
|id|parent| other |
+--+------+-------+
| 1|   1  | blah  |
| 2|   1  | blah2 |
| 3|   2  | blah3 |
+--+------+-------+

結果を次のようにしたい:

+----+------+
|p.id|p.text|
+----+------+
|  1 | Blah |
|  2 | Blah2|
+----+------+
4

4 に答える 4

26

EXISTS次のようにを使用してこれを行うことができます。

SELECT *
FROM Parent p
WHERE EXISTS (SELECT 1
              FROM Chilren c
              WHERE c.Parent = p.id)

または、次のINように使用します。

SELECT *
FROM Parent p
WHERE p.id IN (SELECT c.Parent
               FROM Chilren c)
于 2010-04-03T16:17:57.020 に答える
14

は、両方のテーブルに一致するinner join行のみを返します。

select distinct p.*
from Parent p
inner join Children c on c.parent = p.id
于 2010-04-03T16:20:53.617 に答える
3
Select p.id, p.text
from Parent p
inner join Children c on p.id = c.parent 
group by p.id, p.text
于 2010-04-03T16:20:52.220 に答える
1
SELECT p.*
FROM Parent p
WHERE EXISTS (SELECT 'X' FROM Children c WHERE c.parent = p.id);
于 2010-04-03T16:18:52.783 に答える