• ベストアンサー

SQL文を教えてください

以下のようなテーブルがあります。 IDとnameは複合ユニークキーとなっています。 ID | name 1 | foo 2 | foo 1 | bar 3 | foo 2 | hoge 3 | bar このテーブルから、nameにfooとbar両方を持つIDを抜き出すSQL文が分からずに困っています。 つまり、fooとbarで検索するとID 1とID 3が、fooとhogeで検索するとID 2がヒットするようなSQL文を知りたいのです。 初歩的な質問なのかもしれませんが、どうしてもSQL文が思いつかず大変困っています。 どうぞよろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

foo+barなら SELECT ID FROM tbl WHERE name IN ('foo','bar') GROUP BY ID HAVING count(*)=2 foo+hogeなら SELECT ID FROM tbl WHERE name IN ('foo','hoge') GROUP BY ID HAVING count(*)=2

hearthewindsong
質問者

お礼

お教えくださったSQL文で無事目的を達しました。 ありがとうございました。 感謝してもしきれません。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

select * from xxxxx where id in ( select id from xxxxx where name in ('foo' ,'bar') group by id having count(*) > 1 ) / 条件を変えるには、inの中を変える。 ID NAME ---------- -------------------- 1 foo 2 foo 1 bar 3 foo 2 hoge 3 bar 6行が選択されました。 ID NAME ---------- -------------------- 1 bar 1 foo 3 bar 3 foo ID NAME ---------- -------------------- 2 hoge 2 foo

hearthewindsong
質問者

お礼

こちらのSQL文でも目的を達することができました。 参考にさせていただきます。 この度は親切にお教えいただき、感謝してもしきれません。

関連するQ&A

  • SQL文の書き方

    以下の様なテーブルがあったとして name ┌────┬───┐ │NAME_CD │ NAME │ ├────┼───┤ │1     │ hoge1│ ├────┼───┤ │2     │ hoge2│ ├────┼───┤ │3     │ hoge3│ └────┴───┘ id ┌───┬──┐ │ID_CD │ ID │ ├───┼──┤ │1    │ a1 │ ├───┼──┤ │2    │ b2 │ ├───┼──┤ │3    │ c3 │ └───┴──┘ 結果として ┌─┬───┐ │ID│ NAME │ ├─┼───┤ │a1│ hoge1│ ├─┼───┤ │b2│ hoge2│ ├─┼───┤ │c3│ hoge3│ └─┴───┘ のようにするにはどうしたらよいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQLがわからないので教えて下さい。

    SQLがわからないので教えて下さい。 素人な質問なのかもしれませんが、お願いします。 次のような2つのテーブルがあるとします。 テーブルA ID,name -------- 1,name1 2,name2 3,name3 4,name4 5,name5 テーブルB ID,hoge1,hoge2,hoge3 --------------------- 2, hoge, hoge, hoge 3, hoge, hoge, hoge テーブルAのとテーブルBのIDを見て、テーブルBのID に無いテーブルAのIDを取り出す方法が知りたいです。 質問がわかりにくいかもしれないので上の例でいえば、テーブルAのIDが1~5でテーブルBの方にがありますので、取り出したいIDは、1、4、5です。 どうかご教授ください。 よろしくお願いします。

  • SQL文の書き方について

    お世話になります。下記のような結果を求めるSQL文についてどなたかご教示をお願いします。 以下の2つのテーブル(SMPL_TBL1,SMPL_TBL2)があったとします。 (SMPL_TBL1) ID | NAME | BUSHO ---+--------+--------- 01 | YAMADA | A_GRP 02 | SUZUKI | A_GRP 03 | OKADA | B_GRP 04 | TAKAGI | C_GRP (SMPL_TBL2) ID | POINT | ---+-------+- 01 | 1 | 01 | 2 | 01 | 3 | 02 | 1 | 02 | 2 | 03 | 1 | 04 | 1 | 04 | 2 | 04 | 3 | 04 | 4 | 04 | 5 | 上記テーブルから以下のような結果を得たい場合、 どのようなSQL文を投げればいいでしょうか? (求める結果) ・各人ごとのPOINTのMAX値と各人のデータを抽出(POINTは1~999までの整数です) ID | NAME | POINT| BUSHO ---+--------+------+-------- 01 | YAMADA | 3 | A_GRP 02 | SUZUKI | 2 | A_GRP 03 | OKADA | 1 | B_GRP 04 | TAKAGI | 5 | C_GRP よろしくお願いいたします。

  • 要求を満たすことのできるSQL文を教えてください

    現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。 以下のような要件を満たすSQL文を教えてください。 【もともとの売上の明細のテーブル】 明細ID | NAME | KINGAKU 001  |商品A | 1000 001 |商品B | 500 001 |商品C | 300 002 |商品A | 1000 002 |商品D | 1500 【グループ化後のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1800 002 |商品D | 2500 ・明細IDごとに金額を合計する。 ・NAMEの列については、その明細IDの中で最大の金額の商品名を入れる。 ※現在、明細IDごとに金額を合計するのはできているのですが、  もう1つの要件をどのようにすれば達成できるのか分からない  状況です。要件を満たすことのできるSQL文をぜひ教えてください。 よろしくお願いいたします。

  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • SQL文 テーブルの作成方法について

    以下のようなTABLE1からTABLE2というテーブルを作成したいと考えております。 元テーブル(TABLE1)は、IDという項目がキーとなってデータが入っており、NAME1とNAME2という項目があります。 (NAME1は必ず値が入っていますが、NAME2は値が入っていない場合もあります) 加工後のテーブル(TABLE2)で、NAME1とNAME2の値を結合した形で結果を出力したいと考えております。 (新たに作成したNAMEカラムは、必ずしもユニークになっているとは限りません。NAMEとIDを組み合わせるとユニークになります) ---------------------------------------------------- ■ TABLE1 ID NAME1 NAME1_CATE NAME2 NAME2_CATE ---------------------------------------------------- 001 鈴木 A 山田 B 002 山本 A 003 佐藤 A 高橋 B ---------------------------------------------------- ---------------------------------------------------- ■ TABLE2 ID NAME NAME_CATE ---------------------------------------------------- 001 鈴木 A 001 山田 B 002 山本 A 003 佐藤 A 003 高橋 B ・・・ ---------------------------------------------------- いろいろ試していますが、どのようなSQL文を書いたらよいのか分かりません。 現状のSQL(エラーとなります) ====================================================================================== SELECT ID, NAME, NAME_CATE FROM (SELECT ID, NAME1 as NAME, NAME1_CATE as NAME_CATE FROM TABLE1 WHERE NAME1<>NULL) JOIN (SELECT ID, NAME2 as NAME, NAME2_CATE as NAME_CATE FROM TABLE1 WHERE NAME2<>NULL) ====================================================================================== 初歩的な質問になるかと思ってしまうかと思いますが、よろしくお願いいたします。

  • SQL文を教えて下さい

    2つのテーブルを比較して、片方のテーブルにしかない データを検索したいのですが、どのようなSQL文に なるのか 教えて下さい。 下記の例だと、AテーブルとBテーブルの両方にあるデータ以外のデータを検索したいので、下記の結果になります。よろしくお願いします 期待される結果 003 さああ 004 いいい 005 ううう 例 Aテーブル 001 あいう 002 えおお  003 さああ 004 いいい 005 ううう Bテーブル 001 あいう 002 えおお 

  • LEFT JOINが2つあるSQL文でANDの意味

    ■下記SQL文の意味を教えてください SELECT a.*, b.being_name FROM alive a  LEFT JOIN being b ON a.hoge_id = b.id  LEFT JOIN call c ON c.call_id = a.hoge_id   AND f.hoge_id = 12  WHERE f.hoge_id = 12 OR b.id = 12 ※12の部分は動的に切り替わります ・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか? ・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか? >SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2 >「AND」は2つの条件式の論理積 ・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL文をどう記述すれば良いか教えて下さい。

    テーブルAが以下の様に在るとします。 連番(ユニークキー)/日付/社員コード/所属コード そして、社員コード、所属コードの名称が、テーブルBに登録されています。 区分/コード/名称 ここで、区分+コードでユニークキーとなっていて、区分=1は社員コード、区分=2は所属コードとなっています。 単純に、テーブルAから、ある日付を指定して、連番・社員コード・所属コードを取得する場合、SQL文は以下の様になると思います。 SELECT 連番,社員コード,所属コード FROM テーブルA WHERE 日付='20030401' この時、同時に、テーブルBから社員コードに対応する名称、及び所属コードに対応する名称を取得したい場合は、どの様に記述すれば良いのでしょうか?

  • SQLでできますか?

    SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。

    • ベストアンサー
    • MySQL