アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLの結合条件について

・table_A
ID | ATAI
01 | AAA
01 | XXX
02 | ABC
03 | DEF

table_B
ID | ATAI
01 | 不要
02 | 必要
03 | 必要
04 | 不要

上記のようなテーブルAとBがあるとします。
やりたいこと
1.テーブルAに存在するIDをBのIDから抽出
2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。
※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。

2.がうまくいきません。

select B.ID from table_A A,table_B B
where A.ID = B.ID

上記のSQLに2.の条件を足して、結果を02と03にしたいです。
※CASEは使わずにお願いします。

A 回答 (5件)

#1です。


勘違いしてました。
select B.ID from table_B B
WHERE EXISTS
( SELECT 1 FROM table_A
WHERE A.ID = B.ID )
AND NOT EXISTS
( SEleCT 1 FROM table_A
WHERE A.ID = B.ID
AND A.ATAI = 'AAA' )
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
思い通りの結果が得られました。

お礼日時:2011/11/15 22:54

「'AAA'が登場するIDは、他の条件を付けることなく除外したい」で良いんですね?


(なぜ'XXX'が登場したんだろう?)

ならばATAIに'AAA'が登場するIDのリストを作り、NOTで否定すればよい。
where条件に以下の一行を追加。

and A.ID not in (select ID from table_A where ATAI='AAA')

この回答への補足

and A.ID not in (select ID from table_A where ATAI='AAA')
だと、01は抽出されてしまうんです。

ATAI='AAAはnot inではじけますが、'XXX'ははじけないので。
説明下手ですが、
上記の条件では質問内容にある、2テーブルを作成し実行すると、ID01も抽出されてしまいます。

補足日時:2011/11/15 22:51
    • good
    • 0

Where条件を編集する工夫はご自身でできませんか?



whereに追加の場合は
and A.ATAI not in ('AAA', 'XXX')
でも
and not(A.ATAI = 'AAA' or A.ATAI = 'XXX')
でも良いし

INNER JOINの場合は
where A.ATAI not in ('AAA', 'XXX')
でも
where not(A.ATAI = 'AAA' or A.ATAI = 'XXX')
でも良いし

この回答への補足

説明不足だったかもしれませんが、
条件としては、テーブルAのATAI「AAA」のIDを抽出対象外にしたいのです。
それでは、XXXの値も抽出対象外になってしまいます。
値がXXXでも、AAAの値のIDと同じでなければ抽出対象なのです。

上記ができなくて困っています。

補足日時:2011/11/15 07:27
    • good
    • 0

Where条件を増やすとか


select B.ID from table_A A,table_B B
where A.ID = B.ID
and A.ID <> '01'

select B.ID from table_A A inner join table_B B on A.ID = B.ID
where A.ID <> '01'
でも可

この回答への補足

>2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。

を実現したいので、IDの値を条件にはしたくないのですみません。

補足日時:2011/11/14 21:02
    • good
    • 0

「JOIN」が使えない事情があるのでしょうか?


select B.ID from table_A A JOIN table_B B
ON A.ID = B.ID AND B.ATAI = '必要'

この回答への補足

JOINが使えない事情はありません。
条件の部分をご教授頂ければ助かります。

説明不足だったかもしれませんが、
’必要’の文字列は抽出したいという気持ちを表したもので、
本来’必要’という文字列では無く、B.ATAIには何が入っているかわかりません。

補足日時:2011/11/14 20:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!