SQL:具有匹配结果的表需要根据team-id添加团队信息。如何在一个查询中为家庭和远程团队执行此操作?

时间:2014-08-17 01:06:17

标签: android sqlite join cursor

我在Android上编程,只从SQL开始:

我有2个SQL表,表A包含体育比赛的匹配结果列表,表B包含有关团队的所有信息。

表A有两个团队ID,一个用于主队,一个用于客队。

我想创建一个sql查询,该查询获得每个匹配的匹配结果,该查询与相应的团队相关联,例如表A中的两个团队ID应该至少被表B的团队名称(最好是更多列)替换。

简而言之:对于表A中的每场比赛 - >从表A中获取所有匹配信息 - >从表B添加家庭和客队的信息,对应于来自表A的home-id和away-id,>交付结果

我通过SQL JOIN实现了这个派对,但我只设法加入了家庭或远程团队的信息,而不是两者,因为列发生了冲突,因为主队和客队的信息都来了来自同一个表,因此列名相同(主队有“team_name”,客队也有“team_name” - >冲突)

我怎样才能做到这一点?

有关我为什么要在一个查询中执行此操作的一些信息:我正在使用Android,显示匹配结果列表,这些列表通过Loader异步加载,Loader将Cursor提供给CursorAdapter。正如我理解游标一样,它的本质是只为列表的每一行提供一个结果,因此所有数据查询都必须在一个SQL查询中完成。

感谢您的帮助!

编辑:我当前的sql join就是这个

ScheduleTable.TABLE_SCHEDULE + " JOIN " + TeamsTable.TABLE_TEAMS + " ON " +
                    ScheduleTable.TABLE_SCHEDULE+"."+ScheduleTable.COLUMN_HOME_TEAM_ID + " = " + TeamsTable.TABLE_TEAMS+"."+TeamsTable.COLUMN_ID

1 个答案:

答案 0 :(得分:1)

从另一个表中查找值的最简单方法可能是子查询:

SELECT Date,
       Result,
       (SELECT Name FROM Teams WHERE ID = Schedule.HomeTeamID
       ) AS HomeTeamName,
       (SELECT Name FROM Teams WHERE ID = Schedule.AwayTeamID
       ) AS AwayTeamName
FROM Schedule

但是,如果您需要为一个团队查找多个列,这将变得难以处理。

为了能够在同一个FROM子句中多次使用单个表,必须使用表别名:

SELECT Schedule.Date,
       Schedule.Result,
       HomeTeam.Name,
       AwayTeam.Name
FROM Schedule
JOIN Teams AS HomeTeam ON Schedule.HomeTeamID = HomeTeam.ID
JOIN Teams AS AwayTeam ON Schedule.AwayTeamID = AwayTeam.ID