質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

SQLで欲しいレコードの書き方がわかりません

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 902

score 25

oracle初心者です。
下記のテーブルから対象のidを取得するSQLがわかりません。
どなたかご教示いただけると助かります。

TABLE1
id(外部キー), group_id, element1_id

TABLE2
group_id(外部キー), element2, element3
element_id = 1 かつ element_id = 2 かつ element_id = 3
を含む、element2='enything' かつ element3='nothing'
の一覧(TABLE2.group_id)

よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/08/17 17:45

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • roast_chicken

    2016/08/17 17:53

    element_id = 1 かつ element_id = 2 かつ element_id = 3
    というのは、データとして保持できるのでしょうか?(項目がなさそうなので)

    TABLE1とTABLE2をJOIN句で結合する方法

    select t1.*,t2.* from TABLE1 as t1 , TABLE2 as t2
    where t1.group_id = t2.group_id
    and t2.element2='enything'
    and t2.element3='nothing';


    キャンセル

回答 5

+1

element_idは一つの要素なので、「element_id = 1 かつ element_id = 2 かつ element_id = 3」の条件を満たす行はありえません。
予測ですが、「group_idでグループした際に、element_id = 1, element_id = 2, element_id = 3 の三つを最低限含むelement2='enything' かつ element3='nothing'の一覧」が要望しているものでは?
もし当りなら以下のSQLで取れるかもしれません。(動作確認無し)

SELECT T2.group_id
FROM TABLE2 T2
INNER JOIN TABLE1 T1 ON T2.group_id = T1.group_id
WHERE element2='enything'
AND element3='nothing'
GROUP BY T2.group_id
HAVING SUM(CASE WHEN element_id = 1 THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN element_id = 2 THEN 1 ELSE 0 END) > 0
AND SUM(CASE WHEN element_id = 3 THEN 1 ELSE 0 END) > 0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

SQL初学者にありがちかと思うのですが、
いきなり求める答えを得ようとするとから混乱しやすくなるのです。

考え方に慣れてくれば一気に書くのはありですが、
それまでは段階的にSQLを組み立てる習慣を付けることをおすすめします。

先ず前提としてそれぞれのテーブルで、
それぞれ条件を満たしたレコードの取得方法は分かりますか?

element_id = 1 かつ element_id = 2 かつ element_id = 3
を含む(element1_idのこと?)

ここまでならTABLE1のみの検索条件となりますが、
TABLE1単体で上記条件を満たすSQLを記載できますか?

element2='enything' かつ element3='nothing'

これだけならTABLE2のみの検索条件となりますが、
TABLE2単体で上記条件を満たすSQLを記載できますか?

上の2つがクリアできて始めて次のSTEPに進めるので、
先ずは上2つが質問者さん自身で行えるか確認して下さい。

上2つが出来る所まで理解できる所まできたら、

  • とあるキーを用いてでテーブル同士を結びつける
  • 取得したい列のみ選択(SELECT)する

後は上記2つを行うだけとなります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

SELECT
  t2.group_id 
FROM
  TABLE1 t1 
  INNER JOIN TABLE2 t2 
    ON t1.group_id = t2.group_id 
WHERE
  t1.element_id = 1 
  AND t1.element_id = 2 
  AND t1.element_id = 3
  AND t2.element2='enything'
  AND t2.element3='nothing'
;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 18:15

    WHERE
    t1.element_id = 1
    AND t1.element_id = 2
    AND t1.element_id = 3

    or であればわかるのですが、同じ項目名で取得できますか?

    キャンセル

  • 2016/08/17 19:03

    コメントありがとうございます。
    こちらのSQLでほしい情報がGETできました。
    とても助かりましたm(_ _)m

    キャンセル

0

element_id = 1 かつ element_id = 2 かつ element_id = 3
を含む、element2='enything' かつ element3='nothing'
の一覧(TABLE2.group_id)

TABLE1 の id と TABLE2 の group_id でテーブル結合する
TABLE1 の element1_id が 1 または 2 または 3
TABLE2 の element2 が 'enything' かつ element3 が 'nothing'
以上の条件に合致するTABLE2 の group_id を表示する

ということですかね?
とりあえず、わかるとこまでコード書いてもらえたら
アドバイスしようって人はいると思います。
がんばって書いてみましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 19:03

    コメントありがとうございます。
    こちらのSQLでほしい情報がGETできました。
    とても助かりましたm(_ _)m

    キャンセル

0

返って分かり難くなったかな(本当は図に描くと良い)

<TABLE1>                <TABLE2>
 id(pk)            +-----group_id(pk)
 group_id(fk)<-----+     element2
 element1_id             element3


SQL where条件
<TABLE1>
element1_id in (1,2,3) 

&<TABLE2>
element2='enything'
element3='nothing'

JOIN条件
 group_id

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/17 19:03

    コメントありがとうございます。
    とてもわかりやすかったですm(_ _)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る