我有这个数据库图表:

我试图创建一个查询,在这些表之间执行一些连接,结果如下所示:
||name_|| ||Type # 1|| ||Type #2|| ||Ability #1|| ||Ability #2|| (最后四列代表类型和能力的名称,没有它们的ID。另外,类型#2和/或能力#2可能是空的,这取决于口袋妖怪)
我完全被卡住了。我该怎么做呢?
发布于 2013-01-17 07:02:36
您将想要从连接表开始:
select k.name_,
t.type,
a.ability
from kanto k
left join kantotype kt
on k.pokemonid = kt.pokemonid
left join types t
on kt.typeid = t.typeid
left join kantoability ka
on k.pokemonid = ka.pokemonid
left join abilities a
on ka.abilityid = a.abilityid如果你需要学习连接语法的帮助,这里有一个很棒的visual explanation of joins。
这将为您提供所有名称的列表,以及它们的类型和能力。
如果要轮换列中的值,则可以使用带有CASE表达式的聚合函数来透视数据:
select k.name_,
max(case when t.typeid = 1 then t.type end) Type1,
max(case when t.typeid = 2 then t.type end) Type2,
max(case when a.abilityid = 1 then a.ability end) Ability1,
max(case when a.abilityid = 2 then a.ability end) Ability2
from kanto k
left join kantotype kt
on k.pokemonid = kt.pokemonid
left join types t
on kt.typeid = t.typeid
left join kantoability ka
on k.pokemonid = ka.pokemonid
left join abilities a
on ka.abilityid = a.abilityid
group by k.name_在每个case表达式中,您需要标识要转换的id:
max(case when t.typeid = 1 then t.type end)
^-- replace with your actual value发布于 2013-01-17 07:06:08
您可能想要改变您的方法,让您的数据库查询返回如下内容:
||name_|| ||Type|| ||Ability||而不是
||name_|| ||Type # 1|| ||Type #2|| ||Ability #1|| ||Ability #2|| 换句话说,以记录(行)而不是列的形式返回类型和功能。有关这一点,请参见蓝脚查询。
https://stackoverflow.com/questions/14369441
复制相似问题