【问题标题】:Is there a way to fetch MySQL records using different ID alias's有没有办法使用不同的 ID 别名获取 MySQL 记录
【发布时间】:2019-09-30 08:21:09
【问题描述】:

我正在尝试使用不同的别名获取记录,但它们是相关的。

我使用的服务器是 WAMP。我已成功将我的项目/脚本连接到 PhpMyAdmin 数据库,并且可以使用一些查询在我的 PHP 文件中看到一些记录并成功插入。

但是,当我尝试使用不同的别名获取记录时,我收到一条错误消息:"MySQL said: #1066 - Not Unique table/alias:'teams'"?

您能否解释一下发生了什么,因为当我在数据库中检查这些记录的 ID 时,它们显示它们正在连接/从另一个表中提取记录。

以下是我的 MySQL 查询,我在其中尝试了多次更改,但每次尝试后都没有成功:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date,
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams ON fixtures.home_teamID = teams.team_id 
    JOIN teams ON fixtures.away_teamID = teams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC

来自查询的错误消息指出:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date, 
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams ON fixtures.home_teamID = teams.team_id 
    JOIN teams ON fixtures.away_teamID = teams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC 
LIMIT 0, 25

请向我解释我做错了什么,请注意我是使用 PHP 和 MySQL 的平台的新手。提前致谢。

【问题讨论】:

  • 你加入teams 两次,但我看不出有任何理由这样做。这样做有什么理由吗?
  • 您需要在第二次加入团队表时为其指定别名。
  • @TIM - 原因是“away_teamID 和 home_teamID”表都从该 TEAM 表中获取记录
  • @KIKO - 你能告诉我如何按照我所说的那样做的示例吗?我是这个环境的新手;提前感谢

标签: php html mysql wamp


【解决方案1】:

如果你想加入两个 ime 同一个表,你需要别名

  SELECT DISTINCT fixtures.fixture_id
        , fixtures.fixture_date
        , fixtures.fixture_time
        , fixtures.home_teamID
        , fixtures.away_teamID
        , fixtures.comp_id 
        , a.team_name home_team
        , b.team_name  away_team
  From fixtures 
      JOIN teams  a ON fixtures.home_teamID = a.team_id 
      JOIN teams  b ON fixtures.away_teamID = b.team_id 
      JOIN competitions ON fixtures.comp_id = competitions.comp_id 
  ORDER BY fixture.id ASC

在此示例中,a 和 b 是同一个表的别名,用于两种方式,一种用于 home_team,另一种用于 way_team

对于@Tim Biegeleisen 建议的更紧凑的代码,您可以使用别名作为

  SELECT DISTINCT f.fixture_id
        , f.fixture_date
        , f.fixture_time
        , f.home_teamID
        , f.away_teamID
        , f.comp_id 
        , a.team_name home_team
        , b.team_name  away_team
  From fixtures f 
      JOIN teams  a ON f.home_teamID = a.team_id 
      JOIN teams  b ON f.away_teamID = b.team_id 
      JOIN competitions c  ON f.comp_id = c.comp_id 
  ORDER BY f.id ASC

【讨论】:

  • 有没有办法可以显示名称而不是 ID,感谢您的帮助:D
  • TEAMS 表有以下字段:team_id、team_name、team_email。现在,我想要 home_teamID 和 away_teamID;它们来自 FIXTURES 表,以显示名称而不是 TEAMS 表的 ID。有没有办法解决这个问题?
  • 我提供的代码应该返回您在上面的评论中提出的问题。有什么问题???
  • 感谢错误已解决。我正在获取名称而不是显示 ID 的查询...
【解决方案2】:

您加入了两次“团队”,因此当您提及“团队”时,它不知道您是指在 home_teamID 上加入的第一支球队还是在 away_teamID 上加入的第二支球队。

您可以通过为每个连接指定不同的名称来解决此问题,如下所示:

SELECT DISTINCT fixtures.fixture_id, fixtures.fixture_date,
        fixtures.fixture_time, fixtures.home_teamID, 
        fixtures.away_teamID, fixtures.comp_id 
From fixtures 
    JOIN teams AS hometeams ON fixtures.home_teamID = hometeams.team_id 
    JOIN teams AS awayteams ON fixtures.away_teamID = awayteams.team_id 
    JOIN competitions ON fixtures.comp_id = competitions.comp_id 
ORDER BY fixture.id ASC

【讨论】:

  • 为什么不始终使用别名?
  • @MiK - 感谢 sn-p。我将对其进行测试并就该样本的结果与您联系......
  • @TimBiegeleisen 除非您对开发团队中的别名有明确的政策,否则当一个人总是给团队起别名“足球运动员”而下一个开发人员在他给球队的地方进行查询时,可能会进一步混淆别名“足球运动员”。即,总是让您查找别名的含义,从而使“了解”您的数据库变得更加困难。这只是一个额外的一瞥,但它可以加起来。另一方面,在这样的情况下,您需要别名,并且当您需要在查询中多次引用同一个表时,它们也很有意义(使用像“a”这样的短别名)。
  • @MiK 还算公平,但是更广泛的 SQL 社区的共识是使用别名,并且在编写 SQL 代码时也要保持一致。
  • @MiK - 有没有一种方法可以显示记录名称而不是 ID,因为现在查询可以完美运行,但是它返回每个 ID 字段的 ID 而不是 NAME?
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2020-07-01
  • 2021-06-17
  • 2021-12-03
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
相关资源
最近更新 更多