我为我的班级制作了一个MTG卡数据库
我有5张桌子:
card
拥有cardId
,name
,text
,power
,toughness
,rarity
,manacost
,{ {1}},setId
。 cardId是主键
CMC
拥有color
和colorId
。 color是字符串,colorId是主键
color
拥有type
和typeId
。 Type是字符串,typeId是主键
type
是一个关联表,其中包含card_colors
和cardId
的条目对
colorId
是一个关联表,其中包含card_types
和cardId
的条目对。
如何按名称搜索卡片,并将各自的类型和颜色显示在一行中?目前,我的查询显示每张卡的多个条目,每种颜色一个。
这是我当前的疑问:
typeId
如果你想查看它,你可以在这里找到我的.sqlite文件:
http://www.filehosting.org/file/details/446996/mtg_database.sqlite
答案 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;