我在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
答案 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