gpt4 book ai didi

sql - 加入多个表(多对多关系)

转载 作者:行者123 更新时间:2023-12-04 05:15:10 24 4
gpt4 key购买 nike

我有这个数据库图:

enter image description here

我试图创建一个查询,在这些表之间执行一些连接并导致如下结果:

||name_|| ||Type # 1|| ||Type #2|| ||Ability #1|| ||Ability #2|| 

(最后四列代表类型和能力的名称,没有它们的 ID。另外,类型 #2 和/或能力 #2 可能为空,具体取决于神奇宝贝)

我完全被困住了。我该怎么做?

最佳答案

您将要从加入表开始:

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

关于sql - 加入多个表(多对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com