sqlite结合选择结果进行搜索

sqlite结合选择结果进行搜索,sqlite,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

好的,这是我的两张桌子

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);
我想做的是进行搜索,从
行获取所有数据,然后添加名为
的列(其中custom_properties.card_id==cards.id)。name
。 然后我希望它的值是
vint
如果
type==1
,否则
vstr

下面是一个示例数据集

纸牌

自定义属性

| id | card_id | game_id | name | type | vint | vstr |
+----+---------+---------+------+------+------+------+
| f  | a       | asdf    | range| 1    | 12   |      |
| b  | a       | asdf    | rank | 0    |      | face |
+----+---------+---------+------+------+------+------+
生成的表如下所示,其中
范围
等级
列源自
自定义属性。name

|id | game_id | set_id | name | image | range | rank |
+---+---------+--------+------+-------+-------+------+
|a  | asdf    | fdsaf  | loler| blah  | 12    | face |
+---+---------+--------+------+-------+-------+------+
试试这个:

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'

实际上不可能做到这一点。

对于sqlite,不是这样吗?(我可能错了…)比如:“CASE WHEN(Custom_Properties.type=1)THEN Custom_Properties.vint END As Range”获取错误
error:SQL error靠近第1行:靠近“Custom_Properties”:语法错误
另外,当我移动一些东西时,它说
未知函数IF
。其思想是排名和范围不是数据库中存在的实际值,其思想是它应该获取custom_properties.name的值并将其用作列名。@kelton52 i使用Niall在删除
custom_properties.vstr as Rank
时添加的
CASE
更新了我的答案。同样,我的想法是,我将有两个以上的自定义比例,我将需要它们动态添加到列表中。这会将它们全部放在范围列下的一个列表中。想法是每个自定义属性一列。实际上,要添加到我的上一个语句中,它会为每个自定义属性返回一行,而不是为每个额外属性返回一个新列。根据新信息重新计算我的答案,我的方法不适用。我的想法是,这是不可能的。
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'