使sql查询搜索MTG数据库

时间:2014-04-30 04:39:07

标签: sql database

我为我的班级制作了一个MTG卡数据库

我有5张桌子:
card拥有cardIdnametextpowertoughnessraritymanacost,{ {1}},setId。 cardId是主键

CMC拥有colorcolorId。 color是字符串,colorId是主键
color拥有typetypeId。 Type是字符串,typeId是主键
type是一个关联表,其中包含card_colorscardId的条目对 colorId是一个关联表,其中包含card_typescardId的条目对。

如何按名称搜索卡片,并将各自的类型和颜色显示在一行中?目前,我的查询显示每张卡的多个条目,每种颜色一个。

这是我当前的疑问:

typeId

如果你想查看它,你可以在这里找到我的.sqlite文件:
http://www.filehosting.org/file/details/446996/mtg_database.sqlite

2 个答案:

答案 0 :(得分:0)

SELECT crd.NAME AS CardName, 
       ct.NAME AS CardType, 
       cl.color AS CardColor
FROM card crd
 INNER JOIN card_types ct ON(crd.cardId=ct.cardId)
 INNER JOIN  card_color cl ON(crd.cardId=cl.cardId)
WHERE crd.NAME='%ENTER NAME HERE%';

答案 1 :(得分:0)

我知道这是一个较旧的帖子,但你要找的是PIVOT。您可以使用类似下面的内容将颜色转移到卡的宽处。您可以使用类型或其他任何可能具有多个值的属性执行相同的操作。虽然此代码演示了旋转有限且已知数量的属性,但您可以使用所有不同值的列表动态填充变量,并构建动态T-SQL字符串。此外,您可以使用所有这些来加入查找表以获取详细的卡信息。

select cardid, [1] , [2] , [3] , [4] , [5] 
from 
(
    select cardid, colorid, 
        row_number() over (partition by cardid order by cardid) as rownum
    from card_colors) a
pivot
(
    max(colorid) for rownum in ( [1] , [2] , [3] , [4] , [5] )
)as pvt;