2

次のテーブルがあります。

お父さん

ID
------
a
b
c

f_ID    ID
------------
a        1
a        2
a        3
b        1
b        2
c        1

したい :

  • [1, 2, 3] を与えると "a" を得る
  • [1, 2] を与えると "b" を得る
  • [1] を与えると "c" が得られます

問題は、私が使用する場合です

SELECT *    
FROM Father AS F    
INNER JOIN Child AS C    
ON C.f_ID = F.ID    
WHERE C.ID IN ( '1' )    

これにより、父親が得られます:1、2、3

助けてください、私はSQLが初めてです

4

2 に答える 2

1

このようにしてみてください。Where句の最後に「存在しない」を追加しました。

SELECT * Father AS F
INNER JOIN Child AS C
    ON C.f_ID = F.ID
WHERE C.ID IN ( '1' )
AND NOT EXISTS (
    SELECT * FROM Child
    WHERE Child.ID NOT IN ('1')
    AND F.ID = Child.f_ID
)

別の方法として、null 行を自己結合して選択することもできます。

SELECT * Father AS F
INNER JOIN Child AS C
    ON C.f_ID = F.ID AND C.ID IN ( '1' )
LEFT OUTER JOIN
    (SELECT f_ID FROM Child WHERE ID NOT IN ('1')) a
    ON C.f_ID = a.f_ID
WHERE a.f_ID IS NULL
于 2012-04-18T08:54:45.803 に答える
0

シーケンス全体を一致させるには、一致をカウントし、それを特定のシーケンスのカウントと比較する必要があります。

select f.f_id
  from father f
 inner join child c
    on f.f_id = c.f_id
 -- exact sequence given
 where c.f_id in (1, 2, 3)
group by f_id
-- compare number of children to number of elements in parameter sequence
having count (distinct c.c_id) = 3
于 2012-04-18T08:57:47.683 に答える