2017-05-08 14 views
0

idに対応するコードIを選択しようとしていますが、idの場合はIが唯一の対応値である必要があります。正しいidは、53および8Iと一緒に他のcodeの値を持ちます)。 Oracle SQLの使用。必要条件が

id code 
4 | G 
4 | O 
5 | I 
3 | G 
3 | I  
8 | G 
8 | I 
8 | O 
9 | G 
+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so - 質問/質問285557と受け入れられた答え –

+0

私の悪い、私はそれを持っていたメッセージボックスでどのように達成できるかを理解していませんでした。どこからでもコピーした場合(Excel、SQL Developer)、1行になります。改行を使用して入力しようとすると、改行はスキップされた行と一緒になり、より大きなスペースを取るようになります。将来もやり直します。ありがとう! – Eug

+0

質問を編集するときに小さな "ヘルプ"ボタンをクリックすると、ここに書いてあります:http://stackoverflow.com/help/formattingテキストを書式設定する必要があるすべてのオプションを説明します –

答えて

3

のためのいくつかの調整が必要になる場合があります。

select id 
from t 
group by id 
having min(code) = 'I' and max(code) = 'I'; 

codeNULLすることができた場合、あなたはそれを取るために別の条件を必要とします考慮する。

+0

''I''ではなく' 5' – MatBailie

+0

@MatBailieです。 。 。ありがとうございました。 –

+0

大規模なデータセットに対するこの回答と私の答えのパフォーマンスがどのようなものかを見ることは興味深いでしょう。 –

0

このソリューションは、IDに一致するがコードが異なる場所にテーブルを左結合し、結合が失敗したレコードを見つけることによって機能します。 この最もSQL文では動作しますが、それはあなたが集計でこれを行うことができ、あなたの味

SELECT DISTINCT T0.* FROM [Table] AS T0 
LEFT JOIN [Table] AS T1 ON T0.ID = T1.ID AND T0.Code <> T1.Code 
WHERE T1.ID IS NULL AND T0.ID = 'I' 
+0

この回答は重複IDを返します。 –

+0

'AND T0.code = 'I''を追加します... – MatBailie

+0

ありがとう!このソリューションも同様に機能しますが、サンプル表は複数の結合の結果であるとは言いませんでした。以前のソリューションよりも実行に時間がかかります。 – Eug

0

@GordonLinoffアプローチが最も速い可能性が高いですが、データに応じてさまざまなパフォーマンスプロファイルを持つ代替方法があります。あなたのテーブルには、この第二の選択肢は、あなたのテーブルが2つのインデックスを持っていることを前提としてい(id, code)

SELECT 
    primary.id 
FROM 
    primary -- the table with a unique list of your IDs 
WHERE 
    'I' = ALL (SELECT code FROM yourtable WHERE yourtable.id = primary.id) 

にインデックスを持っている - 別のテーブルが
ユニークid値のすべてに存在する -

この最初のオプションがあることを前提としてい:
- ('I'コードを持っているのIDを見つけるための)(code, id)
- (id, code)(見つけるためにこれらのIDは、任意の他のコードを持っている場合)

(そして@ZacFaragher答えと本質的に同じです。)

SELECT 
    code_i.id 
FROM 
    your_table code_i 
WHERE 
    code_i.code = 'I' 
    AND NOT EXISTS (SELECT * 
        FROM yourtable 
        WHERE yourtable.id = code_i.id 
         AND yourtable.code <> 'I' 
       ) 

異なるSQLエンジンが対処としてそれはさまざまなバリエーションを試し、多くの場合、価値があります相関サブクエリなどでより良い/悪い。

関連する問題