2017-09-16 1 views
1

を複数のアイテムを注文した顧客を選択する方法はいくつかのサンプルデータです:SQL:ここ

ID Item 

1 A  
1 A 
1 B 
2 A 
2 A  
3 A 
3 A 
3 A 

質問:イムが選択されているレコードだけがID 1を持つ顧客のものとなるようにコードを書くしようとしています(すなわち、製品AとBの両方を有する顧客)。結果は次のようになります。

1 A  
1 A  
1 B 

私は多くのことを試しましたが、私は立ち往生しています。私は、自己結合しようとしたが、それは私が欲しいものを生成doesntの:

SELECT a.id, a.item 
FROM table1 a Join table1 b on a.id=b.id 
WHERE upper(a.item) = 'A' 
AND upper(b.item) = 'B'; 

これは私の右の顧客(すなわち、顧客1)を与えるだろうが、それはすべての3つのレコードを引っ張るdoesntの。それはちょうど1列を与える。

最も近い同様の質問が enter link description here

答えて

0

pidを取得してすべてのpid行を出力するには、照会を副選択として使用できます。あなたはどのユーザーが特定の条件に合致し、それらのユーザーについてのすべてをフェッチ見たいと思っているので

SELECT id, item 
    FROM table1 
WHERE id IN (SELECT a.id 
       FROM table1 a 
       JOIN table1 b 
        ON a.id=b.id 
       WHERE UPPER(a.item) = 'A' 
       AND UPPER(b.item) = 'B') 
+0

ありがとう!それは完璧に働いた! – sqlfiddler

+0

RealCheeseLordとJamesonの両方の犬が正解を持っています...どうすれば両方を受け入れることができますか? – sqlfiddler

+0

@sqlfiddlerあなたは1つの答えだけを受け入れることができます。複数の正解がある場合、私は個人的に完全な説明を受け入れるか、どちらも同じ質であれば、前に投稿したものを個人的に受け入れます。しかし、あなたは決める。 – bish

-2

それはあなたが探しているものをこのですか?ですかあなたの質問を理解できなかったかもしれません。

SELECT a.pid, a.mname 
FROM meds a 
WHERE a.pid = 1 
1

- あなたがネストされたクエリ必要があります:このような

SELECT id,item FROM table1 WHERE id IN(
    SELECT a.id 
    FROM table1 a Join table1 b on a.id=b.id 
    WHERE upper(a.item) = 'A' 
    AND upper(b.item) = 'B' 
) 

を私はあなたの作業クエリを取って、使用しますそれはより一般的なクエリのWHERE句で - あなたのためのトリックを行う必要があります

+0

ありがとう!それは完璧に働いた! – sqlfiddler

+0

素晴らしい!幸せに助けてください:) 回答を受け入れること自由に感じてください –

+0

ありがとう...私は試してみました。 RealCheeseLordとあなたは正しい答えを持っています...どうすれば両方を受け入れることができますか? – sqlfiddler