让我先说这应该是一个相对简单的问题,因为糟糕的数据库设计(不是我)使得这个问题变得不必要和复杂。
考虑以下几点
表格明细表
请注意列 homeID
以及 visitorID
包含团队的名称,而不是实际的teamid
为了解决这个问题,我创建了一个包含 teamID
以及 teamName
如下图所示。
桌上团队
我的问题
我必须从他那里拿到队号 table Teams
无论是主客场
所以我创造了 Teams
表和这个简单脚本: SELECT schedule.*, teams.* FROM schedule JOIN teams ON schedule.homeID = teams.teamName OR schedule.visitorID = teams.teamName WHERE schedule.gameID = 411 LIMIT 1 #added Limit1 else the code generates to rows
mysql脚本输出
限制1
请注意上面的teamid是如何只为1个具有 Limit 1
无限制语句(双重迭代)
注意上面的teamid如何为两个团队检索。问题是它在做双重迭代。
tldr公司;以上提出了以下问题
首先,脚本将生成两个输出,一个用于主队,一个用于客队。正如所料,但我不能有。
作为第1个问题的解决方法--我补充说 Limit 1
我遇到的问题 Limit
虽然它只会回馈一个 teamID
(我想这是意料之中的)
问题
如何通过一次迭代从表团队获得两个teamid?希望这有意义。。。。
额外的
带有硬编码团队名称的应用程序演示如下所示(只是为了让您了解他们想要实现的目标)
3条答案
按热度按时间uwopmtnx1#
您可以使用子查询(同一查询中的两个子查询)来解决此问题:
这并不能从中获取所有列
schedule
,只是一个例子来说明它是如何工作的。如果您需要各种查询(包括select *
,尽管这不是一个好的实践(除了测试),但是您可以基于上面的查询创建一个视图(使用schedule中的所有列,除了homeid和visitorid之外,这些列将被schedule中的子查询替换)teams
表)。然后,您可以对该视图放置查询—它们的工作方式将类似于您在其中直接包含团队名称的原始表。kx1ctssn2#
听起来你想加入
teams
两次到schedule
.tquggr8v3#
我猜你想把两个队都放在一排而不是两排。
如果是,则需要加入表
teams
两次。考虑一下这个演示:http://www.sqlfiddle.com/#!9/bb5e61/1号
此连接将两个团队聚集到一行中:
但是,您也可以在内部联接上考虑左联接,这将在teams表中没有相关数据的情况下起作用:
下面是由示例组成表的脚本