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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

Q&A

2回答

1781閲覧

SQL Updateに関する質問

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

0グッド

0クリップ

投稿2016/02/07 16:34

laravel5.2のmigrationでSQLを直接記述しDBをupdateすることが目的です。

仕様
◯tableA
-id
-genre_id
-large_genre_id

◯tableB
-id
-large_genre_id

上記のようにそれぞれ値を持ったテーブルがすでにあります。
tableAに対して以下の条件でupdateをかけたいのですがそのSQlがわかりません。
ご鞭撻のほど宜しくお願い致します。

(tableAに対して)
tableAのもつ「large_genre_id」に該当する、
tableBの「large_genre_id」を持つレコードの「id」で、
tableAの「large_genre_id」をupdateしたい。

例)
tableA
-id = 1
-genre_id = 1
-large_genre_id = 4

◯tableB
-id = 2
-large_genre_id = 4
上記のような場合に際し、tableAの「large_genre_id」を「4(large_genre_id/tableA)」から「2(id/tableB)」にupdateする

言葉足らずなゆえ大変わかりにくい文章かもしれないですが宜しくお願いします。

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

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

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

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

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

guest

回答2

0

migrationに書くコードなのかという疑問も有りますが、以下の様なコードで対応出来ると思います。

DBへの負荷に関してはそこまで考えてないです。
($tableAsっていうのは複数形を表してます、逆に$tableAは単数だと思ってください)

// 1000件ごとに取得 DB::table('tableA')->chunk(1000, function($tableAs) { foreach($tableAs as $tableA) { // tableBから対応するidを取得 $tableB_id = DB::table('tableB')->where('large_genre_id', $tableA->large_genre_id)->value('id'); // 対応するidで更新 DB::table('tableA')->where('id',$tableA->id)->update(['large_genre_id' => $tableB_id]); } }

投稿2016/02/16 01:55

fagai

総合スコア2158

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

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

0

【追記】すみません、何も考えないでぺろっと書いてしまいましたがこれ SQL Server の書き方でした!
Oracle とか他の DB だと書き方違うかも(or できないかも)です(未調査)。すみまっせん・・・!


(SQL Laravel はわからないのですが、普通に SQL の質問として回答します)

ええと、整理しますが

■tableA と tableB は、「large_genre_id」で紐付いているのでしょうか。

■それで、Aテーブルの、その large_genre_id を書き換えるのですか。

SQL

1-- Aテーブル 作成 2CREATE TABLE TEST_tableA ( 3 id Integer, 4 genre_id Integer, 5 large_genre_id Integer, 6 7 -- PK 8 CONSTRAINT [PK_TEST_tableA] PRIMARY KEY CLUSTERED 9 ( 10 id ASC 11 )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) 12) 13GO 14 15-- Bテーブル 作成 16CREATE TABLE TEST_tableB ( 17 id Integer, 18 large_genre_id Integer, 19 20 -- PK 21 CONSTRAINT [PK_TEST_tableB] PRIMARY KEY CLUSTERED 22 ( 23 id ASC 24 )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) 25) 26GO

SQL

1-- テストデータ 準備 2DELETE FROM TEST_tableA; 3DELETE FROM TEST_tableB; 4 5INSERT INTO TEST_tableA VALUES(1, 1, 4); 6INSERT INTO TEST_tableA VALUES(2, 1, 5); 7 8INSERT INTO TEST_tableB VALUES(88, 4); 9INSERT INTO TEST_tableB VALUES(99, 6);

SQL

1SELECT * FROM TEST_tableA; 2SELECT * FROM TEST_tableB; 3 4/* 5 6-- 更新 7UPDATE TEST_tableA SET 8 large_genre_id = bbb.id 9FROM TEST_tableA aaa 10INNER JOIN TEST_tableB bbb ON (bbb.large_genre_id = aaa.large_genre_id) 11 12*/

tableA の 1|1|4 → 1|1|88 に更新される。2|1|5 は変更なし。
合ってるかな・・・ どうかな・・・ ちょっとテストしてみてください。

投稿2016/02/08 01:37

編集2016/02/08 01:46
sk_3122

総合スコア1126

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問