- PR -

SQLの使い方について。

投稿者投稿内容
くり
常連さん
会議室デビュー日: 2006/10/30
投稿数: 28
お住まい・勤務地: tokyo
投稿日時: 2006-11-24 09:42
mysqlを使用しています。
select max(ID)+1の使い方なのですが、
1から登録したいのですが、0からしか登録できません。
0を登録した場合次の登録のときは
Duplicate entry '1-0' for key 1
というエラーが出ます。
この場合演算子などは使えないのですか?
select max(MEMBER_ID>=1 )+1でも結果は変わりませんでした。
単独で使う場合はMAXの値は正確に出ます。

よろしくお願いします。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-11-24 09:51
引用:

くりさんの書き込み (2006-11-24 09:42) より:
mysqlを使用しています。
select max(ID)+1の使い方なのですが、
1から登録したいのですが、0からしか登録できません。
0を登録した場合次の登録のときは
Duplicate entry '1-0' for key 1
というエラーが出ます。
この場合演算子などは使えないのですか?
select max(MEMBER_ID>=1 )+1でも結果は変わりませんでした。
単独で使う場合はMAXの値は正確に出ます。

よろしくお願いします。


なんでSELECT文なのに登録とか関係あるわけ?
イミフメイ。となりの人に聞くなりしてもうちょっとまとめてから質問しなよ。
くり
常連さん
会議室デビュー日: 2006/10/30
投稿数: 28
お住まい・勤務地: tokyo
投稿日時: 2006-11-24 09:57
ぶさいくろうさん返信ありがとうございます。
すみません。質問に抜けている箇所がありました。
インサート文の中にIDの数字を入れなくても、最大値に+1を足していくようにしたいのですが、
insert into t_member(TEAM_ID,ID)values(1,'select max(ID>=1 )+1')

nullの場合、0から登録されてしまい、2度目からはエラーが出てしまいます。


shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-11-24 10:08
引用:

くりさんの書き込み (2006-11-24 09:57) より:
insert into t_member(TEAM_ID,ID)values(1,'select max(ID>=1 )+1')


TERM_IDはつねに1だし、IDは文字列('select max(ID>=1 )+1')を落とすんですね?

#というか「AUTO_INCREMENT」じゃダメなのか?
くり
常連さん
会議室デビュー日: 2006/10/30
投稿数: 28
お住まい・勤務地: tokyo
投稿日時: 2006-11-24 10:30
shimixさん返信ありがとうございます。

早速やってみたのですが、AUTO_INCREMENTも同じ結果で返ってきます。

TEAM_ID,IDは両方ともプライマリキーです。

とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2006-11-24 10:51
MySQLの正確な文法を知らないので、外しているかもしれませんが、
max(ID>=1 )+1
の代わりに、
COALESCE(max(ID),0)+1
では、いかがですか?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-11-24 11:14
引用:

2度目からはエラーが出てしまいます。


当たり前でしょ。
2度目からはinsertじゃなくてupdateでしょうが。
引用:

くりさんの書き込み (2006-11-24 10:30) より:

TEAM_ID,IDは両方ともプライマリキーです。


ユニークと混同してるんじゃないの?
それともMySQLは、単一テーブルの複数の列にプライマリを設定できるのか、
あるいは、プライマリとユニークは区別されていないのか。

オートナンバーを指定した場合は、指定した列には代入は指定しない。
だって、オートナンバーなんだし。
insert into t_member (TEAM_ID) values ( 1 )
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-11-24 13:10
プライマリキーを複数・・というのはやったことがないですね。出来ないとは思いますが未検証です。当然プライマリとユニークは区別されてます。

今時点のSQLを再掲してもらった方がいいでしょう>くりさん。どちらの列をオートナンバー(AUTO_INCREMANET)にしたのかも教えてください。

[ メッセージ編集済み 編集者: shimix 編集日時 2006-11-24 13:12 ]

スキルアップ/キャリアアップ(JOB@IT)