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

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

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

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

SQL

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

Q&A

解決済

4回答

4454閲覧

サブクエリの結果に演算した結果を、インサートしたい

ksyunnnn

総合スコア60

MySQL

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

SQL

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

0グッド

0クリップ

投稿2016/07/12 02:34

編集2016/07/12 02:46

サブクエリの結果に演算した結果を、インサートしたい

MYSQL使ってます。

まず、サブクエリを下記のように書きました。
SELECT max(foo_id)+1 AS MAX_ID FROM bar_table
このクエリは問題なさそう

なので、インサート文作ってみる
INSERT INTO bar_table(ID) VALUES ((SELECT max(foo_id)+1 AS MAX_ID FROM bar_table))

怒られました。。
調べると、あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えないらしい(参照)。
なので、回避策は下記とのこと。

INSERT INTO bar_table(ID) VALUES (SELECT MAX_ID+1 FROM (SELECT MAX(foo_id) AS MAX_ID FROM bar_table))

【追記--11:44】
コメントでエラー内容がほしいとのことだったので念のため追記します。
上記の最後のクエリを実行して表示されるエラーは下記になります。
SQL エラー (1248): Every derived table must have its own alias
【/追記ここまで】

怒られました。。。。

どないしたらええねん!!
知ってる人いたら教えてほしいです。。。

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

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

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

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

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

guest

回答4

0

単に次のIDを裁番したいならAUTO_INCREMENTを使います。
http://www.dbonline.jp/mysql/table/index7.html

投稿2016/07/12 02:48

katsuya141

総合スコア367

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

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

ksyunnnn

2016/07/12 03:00

ありがとうございます。 オートインクリメントですね、確かにこの方法を使えるのが一番なのですが、うまくいかないことがあり、無理やり一つのクエリで連番をインサートできないかと画策しておりました。 添付記事も参考に方法を考えさせていただきます。早速の回答ありがとうございました!
guest

0

普通にできると思いますが

SQL

1create table bar_table(foo_id int not null unique,hoge varchar(10)); 2insert into bar_table values(1,'a'),(2,'b'),(5,'c'),(10,'d');

としておいて、新しいレコードを追加

SQL

1insert into bar_table(foo_id ) 2select max(foo_id)+1 from bar_table;

投稿2016/07/12 03:30

yambejp

総合スコア114583

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

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

ksyunnnn

2016/07/12 05:34

ありがとうございます。 結果としてシンタックスエラーが出てきたので、単なるケアレスミスの可能性もあり改めて確認している最中です。 ご丁寧な回答をいただき助かりました!
guest

0

どういったエラーがでているのか教えていただければ答えやすいと思います。

とりあえず1点だけ。
サブクエリに名前をつければどうでしょうか。

SQL

1INSERT INTO bar_table(ID) VALUES (SELECT MAX_ID+1 FROM (SELECT MAX(foo_id) AS MAX_ID FROM bar_table) AS sub)

投稿2016/07/12 02:40

otom

総合スコア35

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

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

ksyunnnn

2016/07/12 02:55

ありがとうございます。他のかたのコメントも拝見すると、otomさんのおっしゃる通りエイリアスをきることで解決しそうなのですが、指摘の通りクエリを修正すると、今度はなぜかシンタックスエラーが返ってきてしまいました。。 もう少し自分でも見なおしてみます。早急なご回答をいただき本当に助かります。
guest

0

ベストアンサー

VALUESがいらないと思います。

SQL

1INSERT INTO bar_table(ID) SELECT MAX_ID+1 FROM (SELECT MAX(foo_id) AS MAX_ID FROM bar_table)

投稿2016/07/12 02:39

ttyp03

総合スコア16996

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

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

ksyunnnn

2016/07/12 02:44

早速の回答ありがとうございます。 Values抜きで実行してみたのですが、同様にエラーがでてきてしまいましたm ちなみに出てきたエラーは下記でした。 SQL エラー (1248): Every derived table must have its own alias 難しいですね、、
ksyunnnn

2016/07/12 02:58

エイリアスを持たせる、ということですね。。なるほど、ありがとうございます。 ただ、上記のようにクエリを変えてみたのですがなぜか今度はシンタックスエラーが発生しました。。 ものすごく細かいケアレスミスがありそうな気がしてきたので、もう一度ttyp03さんの回答を参考に見なおしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問