2012-02-06 15 views
0

ここで私の2つのテーブルです。私がやりたい何検索のための選択結果を組み合わせたsqlite

CREATE TABLE [cards] (
    [id] TEXT PRIMARY KEY, 
    [game_id] TEXT NOT NULL, 
    [set_id] TEXT CONSTRAINT [id_set_id] REFERENCES [sets]([id]) ON DELETE CASCADE ON UPDATE CASCADE MATCH SIMPLE NOT DEFERRABLE INITIALLY IMMEDIATE, 
    [name] TEXT NOT NULL, 
    [image] TEXT NOT NULL); 

CREATE TABLE [custom_properties] (
    [id] TEXT PRIMARY KEY, 
    [card_id] TEXT CONSTRAINT [id_card_id] REFERENCES [cards]([id]) ON DELETE CASCADE ON UPDATE CASCADE MATCH SIMPLE NOT DEFERRABLE INITIALLY IMMEDIATE, 
    [game_id] TEXT CONSTRAINT [id_game_id4] REFERENCES [games]([id]) ON DELETE CASCADE ON UPDATE CASCADE MATCH SIMPLE NOT DEFERRABLE INITIALLY IMMEDIATE, 
    [name] TEXT NOT NULL, 
    [type] INTEGER NOT NULL, 
    [vint] INTEGER, 
    [vstr] TEXT); 

cards行からすべてのデータをつかみ、その後の名前が(where custom_properties.card_id == cards.id).nameある列を追加し、検索を持つことです。 次に、の場合はtype == 1、それ以外の場合はvstrの値にします。

ので、ここでの例のデータセットは

カード結果のテーブルには、次のようになり

|id | game_id | set_id | name | image| 
+---+---------+--------+------+------+ 
| a | asdf | fdsaf |loler | blah | 
+------------------------------------+ 

custom_properties

| id | card_id | game_id | name | type | vint | vstr | 
+----+---------+---------+------+------+------+------+ 
| f | a  | asdf | range| 1 | 12 |  | 
| b | a  | asdf | rank | 0 |  | face | 
+----+---------+---------+------+------+------+------+ 

、列rangerankcustom_properties.nameから派生しているです

|id | game_id | set_id | name | image | range | rank | 
+---+---------+--------+------+-------+-------+------+ 
|a | asdf | fdsaf | loler| blah | 12 | face | 
+---+---------+--------+------+-------+-------+------+ 
+0

私の答えは新しい情報に照らして後退しますが、私のアプローチは適用されません。 –

+0

これはできないという考えを得る。 –

答えて

0

これを行うために、実際にはできません。

0

はこれを試してみてください。

SELECT Cards.id, 
     Cards.game_id, 
     Cards.set_id, 
     Cards.name, 
     Cards.id, 
     Cards.image, 
     CASE 
      WHEN Custom_Properties.type = 1 THEN 
       Custom_Properties.vint 
      ELSE 
       Custom_Properties.vstr 
     END as Range 
     Custom_Properties.vstr as rank 
FROM Cards INNER JOIN Custom_Properties 
     ON Cards.id = Custom_Properties.card_ID 
WHERE Cards.Name = 'loller' 
+0

sqliteではそうではありませんか? (私は多分間違っている...)のように: 'CASE WHEN(Custom_Properties.type = 1)THEN Custom_Properties.vint END範囲として' –

+0

エラー 'ERROR行き方:近い "Custom_Properties":1行目付近のSQLエラーを構文 エラー ' また、私はそれを周りにいくつかのものを移動すると'不明な関数IF 'と言った。 アイデアは、ランクと範囲は、私のデータベースに存在し、実際の値ではない、という考えは、custom_properties.nameの値を取得し、列名としてそれを使用することになっていますされていることです。それが動作rank'として 'Custom_Properties.vstrを取り外すときニールは –

+0

は' CASE'を使用して私の答えをiUpdated。また、もう一度、私は2つ以上のカスタム比率を持つつもりで、リストに動的に追加する必要があるでしょう。これにより、それらはRange列の下の1つのリストにすべて格納されます。アイデアは、カスタムプロパティごとに1つの列です。 –

関連する問題