【问题标题】:Properly building my MySQL JOIN query正确构建我的 MySQL JOIN 查询
【发布时间】:2023-04-02 20:16:01
【问题描述】:

我有 2 个表,我试图在 1 个查询中从中提取数据。

Guilds:
id (int) | guild (varchar)

Challenges:
id (int) | challenger (int) | challengee (int)

“挑战者”和“挑战者”字段引用 Guilds 表中的“id”。使用一个查询,我想为“挑战者”和“挑战者”(基于“公会 id”)提取公会字段,但我坚持使用正确的语法。

SELECT challenges.`id` AS c_id, challenges.`challengee` AS c_challengee, challenges.`challenger` AS c_challenger, guilds.`guild`
FROM challenges
LEFT JOIN guilds
ON challenges.`challengee` = guilds.`id`

是否可以构建一个同时获取“挑战者”和“挑战者”公会(字段)的查询?

我试图达到的结果示例:

challenge_id  |  challenger  |  challenger_guild  |  challengee  |  challengee_guild
-------------   -------------  ------------------  --------------  -----------------
2             |      8       |  oBsolete          |      5       |  Plague

【问题讨论】:

  • “挑战者”和“挑战者”在一次挑战中会拥有相同的“公会”吗?
  • 不,名称会有所不同。总的来说,我不确定我想要完成的事情是否可能,如果使用 2 个查询来收集我的数据是唯一的选择
  • 那么你是想把挑战者的公会和挑战者的公会连成一排吗?
  • 是的,没错,阿齐兹
  • challenge_guild 和 challengee_guild 从 Guilds.guild 获取其他信息?

标签: php mysql join inner-join


【解决方案1】:

试试

SELECT Guilds.id
     , Guilds.guild
     , chas.challenger
     , chal.challengee
  FROM Guilds
LEFT OUTER
  JOIN Challenges as chal
    ON chal.challengee = Guilds.id as xxx_challengee
LEFT OUTER
  JOIN Challenges as chas
    ON chas.challenger = Guilds.id as xxx_challenger
ORDER 
    BY Guilds.id

不确定它是否会起作用

【讨论】:

  • 对那个确切的语法不走运,但会继续努力。谢谢 Nazaret2005
【解决方案2】:

给你:

SELECT t.id, t.challenger, t.g_challenger, t.challengee, g2.guild as g_challengee
FROM (
  SELECT c1.id, c1.challenger, g1.guild as g_challenger, c1.challengee
  FROM Guilds g1
  JOIN Challenges c1
  ON g1.id = c1.challenger
) t 
JOIN Guilds g2
ON g2.id = t.challengee

工作小提琴: http://sqlfiddle.com/#!2/e036d0/18

【讨论】:

  • 非常感谢阿齐兹!知道这种语法现在为我打开了很多大门。这太棒了。
猜你喜欢
  • 2016-07-08
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2018-07-06
相关资源
最近更新 更多