タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

tipsとsqlに関するhagayuのブックマーク (3)

  • WHERE句の条件でCASE文を使う。 - kuniku’s diary

    表現しにくいんだけど、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 こんなことができるとは知らんかった。

    WHERE句の条件でCASE文を使う。 - kuniku’s diary
    hagayu
    hagayu 2009/01/27
    条件によってWHERE句で使用するカラムを動的に変える。知らなかった・・・。
  • SequenceをGeneratedKeyでエミュレート(MySQL+JDBC版)

    名簿テーブルの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往復している

    SequenceをGeneratedKeyでエミュレート(MySQL+JDBC版)
  • Hackadelic: AUTO_INCREMENTを使わずにシーケンスをエミュレートする

    冗長化を考えると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

  • 1