SQL重复连接(M:N)
如何在SQL中将一个表与另一个表连接多次?示例: 表“夫妇”: 表“信息”: 现在我需要一个组合结果,它必须是“最新的”(Info.seasure必须是可能的最高值,但不能删除过时的行): 预期结果:SQL重复连接(M:N),sql,join,Sql,Join,如何在SQL中将一个表与另一个表连接多次?示例: 表“夫妇”: 表“信息”: 现在我需要一个组合结果,它必须是“最新的”(Info.seasure必须是可能的最高值,但不能删除过时的行): 预期结果: +-------------+------------+----------+-------------+------------+----------+ | FirstName_1 | LastName_1 | Gender_1 | FirstName_2 | LastName_2 | Gend
+-------------+------------+----------+-------------+------------+----------+
| FirstName_1 | LastName_1 | Gender_1 | FirstName_2 | LastName_2 | Gender_2 |
+-------------+------------+----------+-------------+------------+----------+
| Jon | Targaryen | Male | Daenerys | Targaryen | Female |
+-------------+------------+----------+-------------+------------+----------+
我不知道如何解决这个问题,ID不是唯一的,我需要“多次”加入Info表。您可以使用SQL窗口函数选择球员的最新状态,按赛季对每个球员进行排序。然后,您需要为夫妻中的每个人将信息表连接到
couples
表
actor\u最新版本
CTE
结果SQL
结果
第一步:加入表一次,并确保为其添加别名。发布加入onceWelcom David的代码!请解释一下获得所需结果背后的逻辑这是一个说明性的例子,但我需要它来处理更复杂的问题,我需要加入它22次。逻辑是我需要一份足球比赛的报告,里面只有球员的身份证和比赛日期。我必须用每个球员的更多信息来替换ID,但这些信息必须与比赛日期相关。用你正在使用的数据库标记你的问题。这个答案是正确的——尽管OP可能使用的是不支持窗口功能或CTE的旧版本MySQL。
+-----+-----------+-----------+--------+--------+
| ID | FirstName | LastName | Gender | Season |
+-----+-----------+-----------+--------+--------+
| 123 | Jon | Snow | Male | 6 |
| 456 | Daenerys | Targaryen | Female | 6 |
| 123 | Jon | Targaryen | Male | 7 |
+-----+-----------+-----------+--------+--------+
+-------------+------------+----------+-------------+------------+----------+
| FirstName_1 | LastName_1 | Gender_1 | FirstName_2 | LastName_2 | Gender_2 |
+-------------+------------+----------+-------------+------------+----------+
| Jon | Targaryen | Male | Daenerys | Targaryen | Female |
+-------------+------------+----------+-------------+------------+----------+
ID FIRSTNAME LASTNAME GENDER SEASON LAST_CHANGE
123 Jon Targaryen Male 7 1
123 Jon Snow Male 6 2
456 Daenerys Targaryen Female 6 1
with actor_latest (id, firstname,lastname,gender,season, last_change) as (
select
id
, firstname
, lastname
, gender
, season
, rank() over (partition by id order by season desc) as last_change
from info
)
select
left_partner.firstname as firstname_1
, left_partner.lastname as lastname_1
, left_partner.gender as gender_1
, left_partner.season as season_1
, right_partner.firstname as firstname_2
, right_partner.lastname as lastname_2
, right_partner.gender as gender_2
, right_partner.season as season_2
from
couples c
join actor_latest left_partner on c.id_1 = left_partner.id and left_partner.last_change=1
join actor_latest right_partner on c.id_2 = right_partner.id and left_partner.last_change=1
FIRSTNAME_1 LASTNAME_1 GENDER_1 SEASON_1 FIRSTNAME_2 LASTNAME_2 GENDER_2 SEASON_2
Jon Targaryen Male 7 Daenerys Targaryen Female 6