SQL文の質問です
- 運用上の問題でキー項目が設定されていないDBがあり、その中の「locate」フィールドの値を更新する必要があります。
- データの件数が多く、UPDATE3回実行は処理時間がかかりすぎたため、できれば、SQL1文で処理させたいです。
- 旧の値を一旦別の値にUPDATEし、残り2つをUPDATEし、最初の1つを再度UPDATEする方法をお探しです。
- ベストアンサー
SQL文の質問です
------------------- |No|・・・|locate| ------------------- | 1|・・・| LA-01| ------------------- | 1|・・・| LA-02| ------------------- | 2|・・・| LA-01| ------------------- | 2|・・・| LA-01| ------------------- | 2|・・・| LA-02| ------------------- | 2|・・・| LA-03| ------------------- | 3|・・・| LA-03| ------------------- | 3|・・・| LA-03| ------------------- 上のように、運用上の問題で、キー項目が設定されていないDBが あり、その中の「locate」フィールドの値を更新しなくてはいけません。 旧 新 LA-01 → LA-02 LA-02 → LA-03 LA-03 → LA-01 「一旦、どれかをまったく別の値にUPDATEしたあと、 残り2つをUPDATEし、最初の1つを再度UPDATEする」 と考え実行してみたのですが、データの件数が多く、 UPDATE3回実行は処理時間がかかりすぎたため、 できれば、SQL1文で処理させたいのですが、 いい考えが浮かびません。 よい方法が無いか知恵をお貸しください。
- bakuretsu
- お礼率58% (10/17)
- SQL Server
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
それほど考えすぎなくてもいいと思います。 UPDATE TBLA SET locate= CASE locate WHEN 'LA-01' THEN 'LA-02' WHEN 'LA-02' THEN 'LA-03' WHEN 'LA-03' THEN 'LA-01' END WHERE locate IN ('LA-01','LA-02','LA-03') テーブルスキャンで1レコードにつき1回ずつ置き換え処理が行われるだけです。 一気に実行すれば「LA-01がLA-02に更新されたあと、さらにLA-03に更新されたりしないか」と考える必要はありません。
関連するQ&A
- SQL UPDATE 文 GroupByの値を更新したい
SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付 時刻 20090101 0:00 20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付 時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- SQLで取得したフィールドをSQL文として利用
お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。
- 締切済み
- MySQL
- SQL文で
SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB 2 い 3 CC 3 う 4 DD 4 え
- ベストアンサー
- SQL Server
- SQL文で変数の使用
VB6.0でオラクルDBにSQL文を発行したいのですが、 変数の値を使用して更新(update)や追加(insert) 処理を行うときの構文がわかりません。 どなたか教えてください。
- ベストアンサー
- Visual Basic
- アクセス2000のSQL文
お世話になります。 アクセス2000のSQL文で以下のことが可能か教えてください。 新金額と旧金額の二つのフィールドがあります。 旧金額のフィールドの値が0の時は新金額、そうでないときは旧金額の値を引きたいのです。 select 商品名, case 旧金額 = 0 when 新金額 else 旧金額 end from テーブル といった感じです。 アクセスではこういったのは、できないのでしょうか? ご教授お願いします。
- ベストアンサー
- その他(データベース)
- 動的SQLのCOUNTのとり方
動的SQLで、DBの件数を取得したいのですが、 うまく取得できず困っています。 教えてください! 以下の様に、記述しているのですが取り方間違っていますか? EXEC SQL EXECUTE statment INTO :CNTNUM; PREPEAした、statmentには SELECT COUNT(*) FROM テーブル名 where kbn = 3; と、ごくごく普通のSELECT COUNT文です。 cnt_numは、int型のホスト変数で宣言しています。 デバックしながら実行すると、cnt_numの値は初期化した時の 0のままです。実際取得した件数が0件なのかもと思い 初期化時に3を代入して実行したら、やはり値は3でした。 なので、件数が取得出来ていないようです。 オラクルエラーにもならず、次の処理へ流れていってしまいます。 知っている方、教えてください。
- 締切済み
- その他(プログラミング・開発)
- リレーションをSQL文で作る方法は?
urizakaです 今まではSQL-Serverを使っていたのですが、今度からPostgresSQLを使うこと になりました。 さて、そこで質問なのですが、SQL文でテーブルを作るとき、他のテーブルの カラム(フィールド)と作ったテーブルのカラム(フィールド)のリレーションを 作るにはどうすれば良いのでしょうか? 特に、シリアル型で作ったフィールドの値を外部参照キーとして持ってきたい 場合はどのようにSQL文を書けばよいのでしょうか? すみませんが、よろしくお願いします。
- ベストアンサー
- その他(データベース)
- [ACCESS/VBA]動的にSQL文をテーブルから抽出する方法?
ボロボロです。知恵が足りずとても困っています。どなたか教えてください。 テーブル「T_SQL」の各レコードに、 クエリのSQL文(フィールド名=「strSQL」)と クエリ名(フィールド名=「QName」)と 通しNo.(フィールド名=「No」) をデータとして入力し、アクション等に応じて、「T_SQL」から 抽出したSQL文を、 マクロの「プロシージャの実行」の プロシージャ名 SetSQL("クエリー1",FindSQL(No)) により クエリ「クエリー1」に代入したいのです。 現在以下の通りに作りました。 'データベース定義 Public db As Database 'レコードセット定義 Public rs As Recordset Public Function SetSQL(QName As String, strSQL As String) CurrentDb.QueryDefs("QName").SQL = strSQL End Function Public Function FindSQL(No As String) Set db = CurrentDb() Set rs = db.OpenRecordset("T_SQL", dbopendynaset) strcriteria = "[No]='" & No & "'" rs.FindFirst strcriteria FindSQL = rs!strSQL rs.Close db.Close End Function これで実行すると、 「コンパイルエラー メソッドまたはデータメンバが 見つかりません」 というエラーメッセージが出ます。 ちょこちょこいろんなところを修正してみても、 このメッセージだけでなく他にもいろんな エラーメッセージが出ます。 冒頭に書いたような機能を可能にするには、 どのように記述すればよいのでしょうか?? ほんとにほんとに困っています。どなたか助けてください。
- ベストアンサー
- オフィス系ソフト
- sql文のヵウント関数について
sql文のcountを使い、humanテーブルのレコード件数を取得し出力したいのですが、 Object of class SQLite3Result could not be converted to string in のエラーが出て困っています。 (1)humanテーブルのレコード件数を表示する方法を教えてください。(sql文はうまく動いているのが確認できているので、表示する方法を教えていただきたいです。データベースの接続も正常です。) (2)sqlの出力って配列のみなのでしょうか? <?php // 変数の初期化 $db = null; $query=null; $con =null; $db = new SQLite3("test.db"); $res = $db->query ($sql); // データの取得 $query = "SELECT count (id) from human"; //クエリを実行 $con = $db->query($query); //データの件数を表示する print $con; ?>
- ベストアンサー
- PHP
お礼
なるほど。 実行してみたら、できました。 ありがとうございました。