2012-02-06 127 views
0

好的,這裏是我的兩個表格。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列。 那麼我想它的價值是vint如果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

根據新信息收回我的答案,我的方法不適用。 – 2012-02-06 04:44:21

+0

認識到這是不可能的。 – 2012-02-06 05:06:18

回答

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? (我可能是錯的...)如下:'CASE WHEN(Custom_Properties.type = 1)THEN Custom_Properties.vint END as Range' – 2012-02-06 03:37:24

+0

在第1行附近獲取錯誤「ERROR:SQL錯誤:靠近」Custom_Properties「:語法 錯誤' 另外,當我移動一些東西時說'未知函數IF'。 這個想法是秩和範圍不是我的數據庫中存在的實際值,它的想法是應該獲取custom_properties.name的值並將其用作列名。 – 2012-02-06 03:40:00

+0

@ kelton52我更新了我的答案,使用'CASE'作爲Niall在刪除'Custom_Properties.vstr as rank'時添加了 – 2012-02-06 03:40:53