2016-08-03 9 views
1

私は、次のSQLテーブルを持っている:私が欲しいものSQLの別の列を考慮して、列内の次の使用可能な値を選択するにはどうすればよいですか?

bid btype Name  world vi 
    ---|----|------------ |--------|--------- 
    1 | 1 | Business 1 | 0  | 44 
    2 | 4 | Business 2 | 0  | 55 
    5 | 5 | Business 3 | 0  | 23 
    3 | 1 | Business 4 | 1  | 99 
    4 | 2 | Business 5 | 0  | 12 
    6 | 3 | Business 6 | 0  | 14 
    7 | 2 | Business 7 | 1  | 55 
    8 | 1 | Business 8 | 2  | 66 
    9 | 2 | Business 9 | 2  | 77 
    10 | 1 | Business 10 | 3  | 88 

は、例えば、すべての単一の行がで値0で始まり、徐々にその「BTYPE」によると「世界」の欄に値を高めることです"worldカラム " btype "カラムの値が初めて挿入されたので、" btype "がすでに挿入されているかどうかをチェックして、" world "カラムの値が0にならないようにします1など... 私が達成したいのは、同じ "world"と同じ "btype"を共有する2つの行はあり得ないということです。 "btype"は同じではなく "world"それは異なっている必要がありますし、私は それが徐々に増加します。

このようなことをするにはどうすればいいですか?

+0

通常、派生データは保存しません。 – Strawberry

+0

これを行う方法はありませんか? – ThreeKingz

+0

2次自動インクリメントを使うべきでしょうか? http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.htmlを参照してください。 – Barmar

答えて

0

私は通常、このようなクエリをしないので、私は確かに言うことはできませんが、このような何かは多分トリックを行う必要があります。

INSERT INTO theTable(btype, Name, world, vi) 
SELECT [val1] 
    , [val2] 
    , IFNULL((SELECT MAX(world) FROM theTable WHERE btype = [val1]),-1)+1 
    , [val3] 
; 

あなたも、単に従来のINSERTで3番目に選択式を含めることができるかもしれない...値リストの値。私が言ったように、私はこのような質問をしません。 (私は挿入前に最初にチェックするのが好きな少数派ですが、適切な一意性制約の代わりには使用しません)

+0

1の少数派がうまくいけば! – Strawberry

+0

@Strawberryなぜうまくいけば? – Uueerdo

+0

「最初にチェックする」ことは不要であり、競合状態に陥りやすいため、ステップ1の完了とステップ2の開始との間でデータセットが変化する。 – Strawberry

1

例えば:

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(bid INT NOT NULL PRIMARY KEY 
,btype INT NOT NULL 
); 

INSERT INTO my_table VALUES 
(1,1), 
(2,4), 
(5,5), 
(3,1), 
(4,2), 
(6,3), 
(7,2), 
(8,1), 
(9,2), 
(10,1); 

SELECT bid 
    , btype 
    , i 
    FROM 
    (SELECT x.* 
      , CASE WHEN @prev=btype THEN @i:[email protected]+1 ELSE @i:=0 END i 
      , @prev:=btype prev 
     FROM my_table x 
      ,(SELECT @i:=0,@prev:=null) vars 
     ORDER 
      BY btype,bid 
    ) n 
ORDER 
    BY bid; 
+-----+-------+------+ 
| bid | btype | i | 
+-----+-------+------+ 
| 1 |  1 | 0 | 
| 2 |  4 | 0 | 
| 3 |  1 | 1 | 
| 4 |  2 | 0 | 
| 5 |  5 | 0 | 
| 6 |  3 | 0 | 
| 7 |  2 | 1 | 
| 8 |  1 | 2 | 
| 9 |  2 | 2 | 
| 10 |  1 | 3 | 
+-----+-------+------+ 
関連する問題