查询以字段为列的联合表
我不确定这是否可行,还是属于数据透视表类别,但我认为我会去找专家看。
我有三个基本表:Card,Property和CardProperty。由于卡不具有相同的属性,并且通常具有相同属性的多个值,因此我决定使用联合表方法来存储数据,而不是在卡表中使用非常大的列结构。
属性表是基本的关键字/值类型表。因此,我们具有关键字ATK和为其分配的值。还有一个称为SpecialType的属性,该属性卡可以具有多个值,例如" Sycnro"和" DARK"
我想做的是创建一个视图或者存储过程,该视图或者存储过程为我提供了卡ID,卡名称以及作为列分配给卡的所有属性关键字以及它们在指定卡的ResultSet中的值。因此,理想情况下,我的结果集如下:
ID NAME SPECIALTYPE 1 Red Dragon Archfiend Synchro 1 Red Dragon Archfiend DARK 1 Red Dragon Archfiend Effect
这样我就可以计算出我的结果了。
我想,即使是忽悠,也可以根据关键字将属性简单地连接在一起,因此我可以生成一个ResultSet,如下所示:
1 Red Dragon Archfiend Synchro/DARK/Effect
..但我不知道那是否可行。
帮我stackoverflow Kenobi!你是我唯一的希望。
解决方案
回答
不要因串联而崩溃以在数据库中存储相关记录。它不完全是最佳做法。
我们要描述的是数据透视表。数据透视表很难。我建议尽可能避免使用它们。
为什么不只读相关行并在内存中处理它们呢?听起来这并不会花费太多毫秒...
回答
这是用于SQL Server吗?
如果是的话
将多行中的值连接成一列(2000)
将多行中的值串联成一列(2005年以来)
回答
一种选择是使Properties具有PropertyType,因此:
table cards integer ID | string name | ... (other properties common to all Cards) table property_types integer ID | string name | string format | ... (possibly validations) table properties integer ID | integer property_type_id | string name | string value foreign key property_type_id references property_types.ID table cards_properties integer ID | integer card_id | integer property_id foreign key card_id references cards.ID foreign key property_id references propertiess.ID
这样,当我们要设置新的属性值时,可以通过其类型来验证它。一种类型可以是带有值枚举的" SpecialType"。
回答
相关但值是值保存在不同的列中,并且我们早就知道"特殊类型":
SQL查询按月比较产品销售
否则,我将在存储过程中使用游标执行此操作,或者在业务或者表示层中执行转换。
如果我们知道所有情况,请在sql上试一下:
Select ID,NAME ,Synchro+DARK+Effect -- add a some substring logic to trim any trailing /'s from (select ID ,NAME --may need to replace max() with min(). ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect from table group by ID ,NAME) sub1
回答
我的属性表确实有一种类型/格式,这样我就知道在处理整数值时如何进行转换/求值。我不确定是否与这个问题有关。