在不使用笛卡尔连接的情况下组合许多 sql 查询的结果

瓦巴夫·乔汉

如何组合多个选择查询的结果,以便我可以在一个组合视图中获得有关所有战斗的信息。有关完整的架构,请查看此处,因为 stackoverflow 限制了我可以编写多少代码来描述我的问题。

|battle.id  |Attackers       | Defender           | Winner         |
--------------------------------------------------------------------
|    1      |'rishabhchauhan'|'vaibhavchauhan'    |'vaibhavchauhan'|
|    2      |'abhishekgaur'  |'vaibhavchauhan'    |'vaibhavchauhan'|
|    3      |'AnkitSharma'   |'vaibhavchauhan'    |'vaibhavchauhan'|
....

查询以查找攻击者名称:

select CONCAT(player.firstname, player.lastname) as Attacker, Battles.battle_id 
from ((player inner 
join Attacker_Battles on Attacker_Battles.player_id = player.player_id ) 
inner join Battles on Battles.battle_id = Attacker_Battles.battle_id);

查询以查找防御者姓名:

select CONCAT(player.firstname, player.lastname) as Defenders, Battles.battle_id 
from ((player inner 
join Defender_Battles on Defender_Battles.player_id = player.player_id ) 
inner join Battles on Battles.battle_id = Defender_Battles.battle_id);

查询中奖者姓名:

select CONCAT(player.firstname, player.lastname) as Winners, Battles.battle_id 
from ((player inner 
join Winner_battles on Winner_battles.player_id = player.player_id ) 
inner join Battles on Battles.battle_id = Winner_battles.battle_id);
缺口

要将所有的查询合并成一个,你只需要JOINBattles表中每一个的Attacker_Battles等表,然后每个那些到的player表,以获得适当的名称。这样的事情应该工作:

SELECT CONCAT(pa.firstname, pa.lastname) AS Attacker,
       CONCAT(pd.firstname, pd.lastname) AS Defender,
       CONCAT(pw.firstname, pw.lastname) AS Winner,
       b.battle_id As Battle
FROM Battles b
JOIN Attacker_Battles ab ON ab.battle_id = b.battle_id
JOIN player pa ON pa.player_id = ab.player_id
JOIN Defender_Battles db ON db.battle_id = b.battle_id
JOIN player pd ON pd.player_id = db.player_id
JOIN Winner_Battles wb ON wb.battle_id = b.battle_id
JOIN player pw ON pw.player_id = wb.player_id

输出(用于您的 pastebin 数据)

Attacker        Defender        Winner          Battle
rishabhchauhan  vaibhavchauhan  vaibhavchauhan  1
abhishekgaur    pawanyadav      abhishekgaur    2
abhishekgaur    pawanyadav      abhishekgaur    3
AnkitSharma     JayantVerma     AnkitSharma     4
vaibhavchauhan  JayantVerma     JayantVerma     5
rishabhchauhan  abhishekgaur    rishabhchauhan  6
vaibhavchauhan  AnkitSharma     vaibhavchauhan  8

SQLFiddle 上的演示

查询也可以写成(也许更直观一点)如下。如果给定的Battle可能没有Attacker,DefenderWinner,则JOIN此查询中的顶级s 可以替换为LEFT JOIN

SELECT CONCAT(pa.firstname, pa.lastname) AS Attacker,
       CONCAT(pd.firstname, pd.lastname) AS Defender,
       CONCAT(pw.firstname, pw.lastname) AS Winner,
       b.battle_id As Battle
FROM Battles b
JOIN (Attacker_Battles ab
      JOIN player pa ON pa.player_id = ab.player_id) ON ab.battle_id = b.battle_id
JOIN (Defender_Battles db
      JOIN player pd ON pd.player_id = db.player_id) ON db.battle_id = b.battle_id
JOIN (Winner_Battles wb
      JOIN player pw ON pw.player_id = wb.player_id) ON wb.battle_id = b.battle_id

SQLFiddle 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spark SQL:如何在不使用rdd.cache()的情况下缓存SQL查询结果

来自分类Dev

连接SQL查询的结果

来自分类Dev

SQL连接查询结果问题

来自分类Dev

在许多OR的情况下改善sql查询

来自分类Dev

如何在不使用PIVOT的情况下以列vs值而不是行的方式获取sql select查询结果

来自分类Dev

SQL查询不会连接我的结果

来自分类Dev

对SQL子查询的结果使用“ LIKE”

来自分类Dev

使用SQL,如何计算查询的结果数量?

来自分类Dev

如何获取使用变量的SQL查询的结果?

来自分类Dev

在SQL查询中使用函数的结果

来自分类Dev

在查询结果中使用sql变量

来自分类Dev

SQL查询根据单独的查询结果连接多个表

来自分类Dev

使用日期查询时,SQL查询不会显示结果

来自分类Dev

如何在不使用模型的情况下使用Entity Framework执行原始SQL查询?

来自分类Dev

如何在不使用Distinct的情况下删除SQL查询中的重复项?

来自分类Dev

SQL多个JOIN或子查询,但避免使用笛卡尔积

来自分类Dev

SQL查询:[计算查询结果]

来自分类Dev

SQL查询显示结果

来自分类Dev

SQL空查询结果

来自分类Dev

SQL查询的ORDER BY结果

来自分类Dev

SQL查询重复结果

来自分类Dev

SQL查询结果结构

来自分类Dev

SQL查询结果重复

来自分类Dev

SQL查询-限制结果

来自分类Dev

SQL查询结果错误

来自分类Dev

Sql查询结果问题

来自分类Dev

如何组合 2 个 sql 查询以获得 1 个结果

来自分类Dev

SQL:如何组合两个查询并获得相同的结果?

来自分类Dev

如果情况不工作与SQL查询蟒蛇空结果