- ベストアンサー
SQLでどうやったらできますか?
データベース初学者です。どうぞお知恵をお貸しください。 数百人ほどの名前がnameA列に並んでいるtableAと,数万人の名前がnameB列に並んでいるtableBがあります。tableA列の各行の名前が,テーブルBの中に何回出てくるか数えて,結果の数字をtableAの各行2列目(列名はnumber)に表示させたいと思っています。 SQLは初めて触るので,正直言って方法がまったく見当つきません。。どなたかお詳しい方,どうか宜しくご教示ください。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 3つのテーブルを結ぶSQLの書き方
お世話になります。 3つのテーブルを結びつけるSQLの書き方がわかりません。ご指導お願いします。 [TableA][ID] [TableB][ID] [TableC][ID] [TableA]と[TableB]をLEFT JOINでつなぐ。 上の結果を[TableA][ID]と[TableC][ID]でInner joinでつなぐ。 つまり・・・ SELECT TableA.ID,TableB.ID FROM TabelA LEFT JOIN TableB→この結果 SELECT TableA.ID,TableB.ID TableC.ID From この結果 INNER JOIN TableC ON TableA.ID = TableC.ID こんな感じのことをやりたいのですが、記述の方法がわかりません。 どなたかお知恵をお貸しください。
- ベストアンサー
- その他(データベース)
- ビュー(インラインビュー)で集約した結果と結合するSQLについて
テーブルAを複数のキー項目で集約した結果と、テーブルBを結合しようとしています。 インラインビュー(もしくはビュー)で予め集約を行う、以下のようなSQLを考えました。 候補<1> MAX関数でTableA.列1を絞る select ... from (select max(列1),列2,列3,列4 from TableA group by 列2,列3,列4) TableA2,Table_B where TableA.列2=TableB.列2 and ...; 候補<2> ROW_NUMBER関数で列1の順位を取得し、Where句で順位=1とすることでTableA.列1を絞る select ... from (select 列2,列3,列4 from TableA group by 列2,列3,列4 row_number() over (partition by 列2,列3,列4 order by 列1) RN) TableA2,Table_B where TableA.列2=TableB.列2 and ... and RN=1; ※候補<1><2>で結果が異なることがありますが、ともかく 「インラインビュー(もしくはビュー)で予め集約を行う」がやりたいことです。 しかしこのようなクエリだと、インラインビューでもビューでも、 性能がでません。実行計画を確認したところ、TableA,TableBの結合で生成される レコードごとに毎回集約を行っているようで、膨大なクエリ数が発生していました。 ビューやインラインビューで上記のように集約を行うと危険、とはよく聞きますが... ビューやインラインビューで集約した結果をひとつのテーブルとみなして結合するなど、 レコードごとに集約を行わないようなノウハウがありましたら、お教え願います。
- ベストアンサー
- Oracle
- SQL:テーブル結合で該当レコードがない場合
SELECT TableA.ID,SUM(TableA.量),TableB.金額 FROM TableA,TableB WHERE TableA.ID = TableB.ID GROUP BY TableA.ID,TableA.量,TableB.金額 こんな感じのSQLなんですが TableAをメインテーブルとして ↓のような結果を得るように作り変えれないか考えています ■TableBとの結合レコードあり(金額登録あり) 1,50,1500 ■TableBとの結合レコードあり(金額登録なし) 1,50,(NULLかスペース) 考えているんですが思いつかないのでヒントいただけたらと思います。宜しくお願いします。
- 締切済み
- SQL Server
- SQLを教えてください
単純そうなのですがSQLが分かりません。 次のような2つのテーブルがあるとします。 TableA ( a VARCHAR2(2) b VARCHAR2(30) ) TableB ( x VARCHAR2(2) y VARCHAR2(30) z1 VARCHAR2(2) z2 VARCHAR2(2) z3 VARCHAR2(2) z4 VARCHAR2(2) z5 VARCHAR2(2) ) この時にTableBはTableAのグループみたいなものでz1からz5までがTableAのaが登録されています(NULLの場合もあります)。ここでTableBの内容を表示するときに x, y, b1, b2, b3, b4, b5 と出力したいのです。 すみませんがよろしくお願いします。
- ベストアンサー
- Oracle
- このSQL文を教えてください。
Windows2000(SP3) SQLServer2000(SP3) で開発しています。 テーブルA 項目No,大分類コード,中分類コード,詳細コード,日付,内容 テーブルB 大分類コード,中分類コード,詳細コード,新_詳細コード,内容 TableA,Bでは大分類コード,中分類コード,詳細コードがリンクする このような状況で、TableA,Bを下記のようにjoinして、 TableA.大分類コード, TableA.中分類コード, TableB.新_詳細コード, が重複するデータを取得する場合のSQL文を教えてください。 (join) SELECT TableA.*, TableB.* FROM TableA LEFT OUTER JOIN TableB ON TableA.大分類コード=TableB.大分類コード AND TableA.中分類コード=TableB.中分類コード AND TableA.詳細コード=TableB.詳細コード よろしくお願いします。
- 締切済み
- その他(データベース)
- SQLiteのUPDATE文を教えてください。
UPDATE tableA, tableB SET tableA.name = tableB.name WHERE tableA.id = tableB.id; 上記のSQLが他のデータベースでは動きますが、SQLiteでは動きません。 同意味のSQLはどう書くのでしょうか。お願いします。
- ベストアンサー
- その他(データベース)
- 特定のテーブルを除いたバックアップ
データベース名をsampleとしますとバックアップのコマンドは mysqldump --password='xxxxx' sample > backup.sql となるのですが、このデーターベースの特定のテーブルを除いたものをバックアップしたいのですが どうすればいいのでしょうか? 以下のようにテーブルを個別に指定してひとつひとつコマンドを発行するしかないのでしょうか? mysqldump --password='xxxxx' sample tableA > tableA.sql mysqldump --password='xxxxx' sample tableB > tableB.sql mysqldump --password='xxxxx' sample tableC > tableC.sql よろしくお願いします。
- ベストアンサー
- MySQL
- truncate文で全テーブルを一気に削除できるか?
さきほどと似たような質問ですみません。 SQLコマンドであるデータベースの全テーブルを削除したいんですが、 truncate一文ですませる方法はないでしょうか。 それとも、一行ずつ truncate tableA truncate tableB .... とやっていくしかないのでしょうか?
- ベストアンサー
- Oracle
- Joinしてカウントしたいのですが,,,
どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。
- 締切済み
- MySQL
- SQL Server2008のクエリの書式に関する
SQL Server2008のクエリの書式に関する質問です。 異なるテーブルを結合をする際の列名は、以下のようにピリオドを使って表現します。 <テーブル名>.<列名> これは、皆さん当然のように使われていると思います。 ここから質問ですが・・・。 異なるデータベースのテーブルを結合させる場合は、どうすればよいですか? <データベース名>.<テーブル名>.<列名>とするのでしょうか?(やってみたが、うまくいかなかったような気が・・・。) そもそも、異なるデータベース間では、テーブル結合できないのでしょうか? ご指導よろしくお願いいたします。
- ベストアンサー
- SQL Server
お礼
簡潔に回答頂いてありがとうございます。大変参考になりました。 SQLはDBMSによってかなり方言があるんですね。細かく教えて頂いたのでうまくいきました。 本当にどうもありがとうございます。