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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

867閲覧

EXCELからSQL文を作成するには

ryochin07

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/06/01 14:00

DBより、抽出した結果を以下のようにEXCELでまとめたものがあったとします。

ここで、この中から以下の条件に当てはまるレコードの"flg"を"0"→"1"に変更してほしいと依頼があったとします。
■ 条件
① placeが"東京"、または"大阪"
② score_idが、"500"~"600"のもの

|A|B|C|D|E|F|
|:--|:--|:--|:--|:--
|1|id|name|place|flg|score_id
|2|1|太郎|東京|1|123
|3|2|田中|神奈川|0|11
|・・・|・・・|・・・|・・・|・・・|・・・

上記に満たすレコードを抽出して、"flg"を"1"に変更するSQLを作成する場合、以下のようになると思います。

sql

1update テーブル名 as a SET a.flg = 1 where a.place = '東京' or '大阪' and a.score_id between 500 and 600;

ここで、例えば、
フィルターで、条件①②に該当するレコードを抽出して、G列以降に以下のように加えます。
L列には、G~Kまでの値を結合させてSQL文を作成します。
EXCEL上で、この計算式を各行へ貼り付けて作成します。
各レコードのSQL文を作成したら、コピーをしてDB管理ソフトなどで、SQLを流す。

このような手順となるのでしょうか??

他に良い方法があればご教授していただければと思います。

最初に、最初に抽出した条件が分かれば問題はないのですが。。

よろしくお願いします。

|A|B|C|D|E|F|G|H|I|J|K|L
|:--|:--|:--|:--|:--|
|1|id|name|place|flg|score_id|
|2|1|太郎|東京|1|123|update テーブル名 as a SET a.flg = 1 WHERE a.place = |=$D1| and score_id = |=$F2|;|=G2&H2&I2&J2&K2
|3|2|田中|神奈川|0|11|
|・・・|・・・|・・・|・・・|・・・|・・・

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/01 14:30

そもそもDBから抽出した結果という時点で実際のDBのデータから離れるので 余程規則性がない限り、わざわざ外部でSQL組んだりしません。 条件に沿ったSQLを自前で書きます。 Excelの機能使って初期データのINSERTを作ることは(特にテストデータ、初期マスタデータなど)あってもUPDATEはあまり使いませんね。 質問の意図が見えなかったので回答ではなくこちらに書きました。
Ta-tun

2021/06/01 14:38

DBから引っこ抜いてきたデータをもとに売り上げの集計的なことをしたいのかなぁ… 管理サイトとかないから運用でカバー、的な…
hope_mucci

2021/06/01 15:21

m.ts10806さんの仰る通り、ExcelのデータからINSERT文を生成するのであれば質問文のようなことはよく行います(もちろん十分テストをしてから)が、質問のような要件の依頼であればわざわざUPDATE文をExcelのセルで生成することはありません。冒頭に書かれたSQL文を1回流せば済む話です。 処理結果の事前確認やロールバック前提で一度実行してExcelとベリファイすることはよくあります。 質問者の本当の意図は、質問文に書かれていることではないと考えます。 要件をよく整理して、本当に聞きたいことは何か?を考えましょう。
退会済みユーザー

退会済みユーザー

2021/06/03 01:20 編集

私は皆さんと意見が違います。 データの規模によっては、更新データだけで相当量になるケースがあるでしょう。 すぐに使えるログに収まる量で、Oracle Flashback Queryのような機能があって使える権限があれば、そのまま実行してもいいかもしれません。ただその程度の作業をする人にそこまでの権限を与えるかは人によります。なので、ここではそのような権限がなく、DDLだけは使える権限があると考えます。 実運用環境での変更だと思うので、このケースだと、 ①変更前データの退避先一時テーブル作成 ②変更後データの退避先一時テーブル作成 ③実テーブルで当該行データをロックしつつ、①に流し込む ④①を元に変更後データを②に流し込む ⑤②から実テーブルに変更後データを流し込む ⑥各種確認後(条件に当てはまるものが漏れてないかなど)、コミット ⑦再確認 ⑧①②をExcelにコピー ⑨退避先テーブル削除 こんなことを望まれているのではないかと推測します。 ここで大事なのは、⑤で各行を一意に指定するカラムを条件に更新をかけることです。 注意すべき点は、各種プログラムが同時に同じテーブルを操作している可能性を考慮することです。
guest

回答1

0

EXCELからSQL文を作成するには

同じデータがDBにある場合、値データを使用してSQL文を生成する事はありません。
SQL文を直接実行すれば良いだけです。

EXCELからSQL文を生成する場合によくあるのは、DBにエクセルのデータを反映する場合や、レイアウト情報から、DDL(CREATE TABLEなど)文を生成するような場合です。

最初に、最初に抽出した条件が分かれば問題はないのですが

質問の条件はあくまで例で、条件の分析が必要という事なら、EXCELの解析でも良いですけど、SQLを発行して分析した方が効率が良いと思います。

因みに、質問のSQL文は文法エラーを含んでいます。

SQL

1where a.place = '東京' or '大阪' and a.score_id between 500 and 600 -- ←誤 2 3where a.place In ('東京','大阪') and a.score_id between 500 and 600 -- ←正

投稿2021/06/01 15:56

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問