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'