- ベストアンサー
サブクエリーについて教えてください。
taka_tetsuの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
そのまま埋め込むだけ。 select c,d,e,sum(f) as 結果 from (select a,b,c,d,e,f from TABLE where a='A' and b='B') group by c,d,e having e='E' #ただし、SQL Serverのバージョンによっては出来なかったはず。
関連するQ&A
- サブクエリーなしで実現できますか?
以下のA、Bを結合して期待する結果を得たいです。 条件 ・MySQL4なのでサブクエリーは使えません。 ・テーブルの型が異なるので、UNIONは使えません。 ・両テーブルともa b の2カラムでプライマリキーになります。 ■テーブルA a b ---- 1 2 1 4 ■テーブルB a b c d -------- 1 3 c d 1 4 c d ■結果 1 2 1 3 1 4
- ベストアンサー
- MySQL
- サブクエリー操作について
また、わからない事が出てきました。 table_1とtable_2からSQL文で以下の抽出結果を得たいのですが どうもうまく行きません。 ☆table_1 u_no , u_name , u_flag 1 , 山田 , 1 2 , 田中 , 1 3 , 鈴木 , 0 ☆table_2 b_no ,b_uno , b_title , b_date 1 , 1 , 本 , 2007-01-10 2 , 1 , 鉛筆 , 2007-01-03 3 , 2 , ペン , 2007-01-15 4 , 2 , 本 , 2007-01-13 5 , 2 , 本 , 2007-01-03 6 , 3 , ノート, 2007-01-01 7 , 3 , 本 , 2007-01-08 ⇒抽出結果 (日付順) b_no ,b_uno , b_title , b_date 4 , 2 , 本 , 2007-01-13 1 , 1 , 本 , 2007-01-10 5 , 2 , 本 , 2007-01-03 一応以下のようなSQL文などでいろいろやっているのですが、existsなどの使い方が 良くないのでしょうね。 select b_no,b_uno,b_title,b_date from table_1 as t1,table_2 where exists (select * from table_2 as t2 where t1.uno=b_uno and t1.u_flag='1' and t2.b_title like '%本%' ) group by b_uno order by b_date desc 尚 MySQLは、5.0を使っています。 どなたかご存知の方がいらっしゃいましたら よろしくご教授お願い致します。
- ベストアンサー
- MySQL
- ACCSESSのクエリについて教えてください
すみません! SQL初心者なのですがクエリについておしえてください。 table1 id kigou 1 a 2 b 3 c 4 d 5 e table2 id kigou 1 a 2 b 3 cc 4 ee 上記の2テーブルよりkigouのc d eが含まれるデータを抽出して kigouの1桁目が同じもののidを合計する場合、どのような 構文になりますでしょうか。。 以下のように記載しましたが、その後どうすればよいかわかりません。 select * from table1 left join table2 on table1.id=table2.id where table1.kigou in ('c','d','e') or table2.kigou in ('c','d','e') そもそもアプローチの仕方が間違っているのでしょうか。。
- ベストアンサー
- その他(データベース)
- オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、 SQL> > select * from テーブルA > where (key1,key2) in (select key1,key2 from テーブルB) このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?
- ベストアンサー
- SQL Server
- Mysql サブクエリの使い方
table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。
- ベストアンサー
- MySQL
- 重複データの抽出方法(複数項目)
以下のようなテーブルからc列とd列のデータが重複しているレコードを取得したいために、以下のSQLを試してみました。 a列|b列|c列|d列 ---|---|---|--- 01 |01 |01 |01 02 |01 |01 |01 03 |02 |01 |03 04 |02 |02 |03 05 |01 |01 |02 06 |02 |02 |03 select * from テスト where c in (select c from テスト group by c,d having count(*)>1) and d in (select d from テスト group by c,d having count(*)>1) そうしたところ、以下の結果になってしまいました。 想定では、○のレコードだけ抽出できると思ったのです。 ×のレコードを抽出したくないのですが、SQLのどこが 間違っているのでしょうか? a列|b列|c列|d列 ---|---|---|--- 01 |01 |01 |01 ○ 02 |01 |01 |01 ○ 03 |02 |01 |03 × 04 |02 |02 |03 ○ 06 |02 |02 |03 ○ (使用DB)SQLServer2000
- ベストアンサー
- SQL Server
- SQL 表の結合
SQLで2つの表から条件に合ったデータを取り出し、同じ列に表示させたいのですが、 どうやっても外部結合のようにすることしかできませんでした。 取り出したデータを縦に結合?させることはできるのでしょうか? 例) dataは月の上旬中旬下旬でそれぞれabcとします。 入力値はmonthとdayで、これらからuriageを選択します。 dataの取りうる値はa,b,c,ab,bc,abcとします。 table:A 売上表 table:B 上旬中旬下旬判断 --------------------------- ----------- key | data | month | uriage day | data --------------------------- ----------- 1 | a | 1 | 500 1 | a 2 | ab | 1 | 800 … | … 3 | bc | 1 | 400 10 | a 4 | c | 1 | 100 11 | b 5 | abc | 1 | 900 … | … … | … | … | … 31 | c --------------------------- ----------- month = 1 , day =5のとき table:Bより SELECT data FROM table:B WHERE day = 5 としてdata "a" を得ます。 この"a"と同じdataを持つuriageを表示させたいので SELECT uriage FROM table:A WHERE month = 1 AND data = (SELECT data FROM table:B WHERE day = 5) として table:query1 -------- uriage -------- 500 -------- を得ました。 ここまでは良いのですが、これに付け加えて、 table:Bから取り出したdata "a"をtable:Aのdataが含むとき(data = a,ab,abcのとき) その全てのuriageを表示させたく、 ワイルドカードを使おうと SELECT uriage FROM table:A WHERE month = 1 AND data = %(SELECT data FROM table:B WHERE day = 5)% 等としてみたのですが、上手くいきませんでした。 そこで、別のクエリーを作って SELECT uriage FROM table:A WHERE month = 1 AND data = 'ab' AND data = 'abc' として table:query2 --------- uriage --------- 800 --------- 900 ---------- を得ました。 そして、最後に、 得られた2つの表をまとめて --------- uriage --------- 500 --------- 800 --------- 900 --------- としたいのですが、 SELECT uriage, uriage FROM query1, query2 とすると ------------------ uriage | uriage ------------------ 500 | 800 500 | 900 ------------------ となりますし、UNIONは使い方がよくわからないためシンタックスエラーにしかならず...。 そもそも、縦に結合?はできるのでしょうか??? あれこれ試してみたのですが、詰まってしまったので、 どなたか知恵をお貸しください。
- ベストアンサー
- PostgreSQL
- sqlについて
下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no, isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no
- 締切済み
- その他(プログラミング・開発)
- PostgreSQLでサブクエリーをJOINする方法
たとえば、 select A.field1, B.field1 from (select field1 from table1 where field2='x') A, (select field1 from table2 where filed2='y') B where A.field2=B.field2; のようなことをしたいのですが、 Oracleだとこの方法でデータを取ってこれるのですが、PostgreSQLだとエラーで返ってきてしまいます。 PostgreSQLのバージョンは6.5.3です。 バージョンが上がると上記の書き方も通るようになるのでしょうか? また、上記の書き方と同じ意味を持つ他の書き方をご存知でしたら教えてください。よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- MySQLでサブクエリーが使えないため困っています
MySQL3.23.58にて以下のSQLを実行したいのですが、 サブクエリーが利用できないため困っています。 やりたいことは、 1.memberテーブルにemailが重複したデータがあるため、 ユニークなemailを取得したい。 2.取得したemailを元にmemberテーブルを参照し、 シーケンシャルでユニークなidを取得したい。 3.その取得したidを元にflagが立っているものを取得したい。 以上になります。 実際に行いたいSQL文は以下になります。 select count(*) from member where id in ( select max(id) from member where email in ( select distinct email from M_MEMBER where email != '' and email not like '%@docomo.ne.jp' and email not like '%ezweb.ne.jp' and email not like '%ido.ne.jp' and email not like '%vodafone.ne.jp' and email not like '%@jp-%' ) ) and flag = 1; どうかよろしくお願いいたします。
- 締切済み
- MySQL
補足
ご回答ありがとうございます。 kameidさんからも同様に指摘されていますが、 SQL SERVER 2000ではご回答のようなサブクエリーは使用できないのでしょうか? クエリアナライザで実行すると、キーワード'GROUP'付近に正しくない構文があります。というエラーが出ます。 よろしくお願いします。