表現しにくいんだけど、WHERE句で カラム条件のカラム名をCASE文で変える colm1が0の場合に、colmAを条件とする colm1が1の場合に、colmBを条件とする Select * From table1 Where (CASE WHEN colm1='0' THEN colmA WHEN colm1='1' THEN colmB END ) LIKE 'あああ%' 試したのは、Oracle10g こんなことができるとは知らんかった。
名簿テーブルのIDがAUTO_INCREMENTの場合に係り活動テーブルに入れるIDの取得に困ります。 名簿テーブルにデータをINSERTする。(IDは自動生成で1が入ったとする) 自動生成された1を取得するために以下の方法で取得する SELECTを発行する LAST_INSERT_ID()をコールする 係り活動テーブルにデータをINSERTする。 SELECTの場合、MAX関数使った場合はマルチスレッド、マルチプロセスで破綻します。 LAST_INSERT_ID()の場合、発行する順番に気をつければ同一セッション内で値が保持されている・・・? 詳しくはわかりません(´・ω・`) またAUTO_INCREMENTをやめてシーケンステーブルを作成した場合、SELECTは上記と同じ理由で破綻(ロックかけるなら別ですけど。)、LAST_INSERT_IDは上手くいくが、どちらにせよ2往復している
冗長化を考えるとAUTO_INCREMENTなカラムってちょっと使いにくかったり…。 あるいはトランザクションセーフな処理を考えて見ても、AUTO_INCREMENTを使うと、 INSERTしてからlast_insert_idで取得って流れになってしまい、やっぱり使いにくいなぁなんて。 余り知られていないかもしれないが、公式ドキュメントでも紹介しているシーケンスのエミュレート方法についてメモって見ます。 どのようにやるかと言えばシーケンスをエミュレートするテーブルを作り、 その中でシーケンスの値を保持する唯一つのレコードがあればOKです。 CREATE TABLE Sequences ( member_seq bigint not null default 1, friend_seq bigint not null default 0 ) TYPE = InnoDB; INSERT INT
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く