我需要使用类似于Inner Join的SQL代码,但要能够在ON中使用不同的列。也许我可以使用一些更有针对性和更具体的东西。你认为我需要什么?我如何修复?
我想做的,按顺序,是:
1.在NEXT
表中观察下一场芝加哥曲棍球比赛(芝加哥-明尼苏达)。芝加哥在ClubHome
中显示
- 下一个**
| 俱乐部之家|俱乐部之路|锦标赛|
| - ------| - ------| - ------|
| 芝加哥|明尼苏达州|非霍奇金淋巴瘤|
| 纽约|洛杉矶|非霍奇金淋巴瘤|
| 达拉斯|拉斯维加斯黄金|非霍奇金淋巴瘤|
1.在Results表中,如果芝加哥位于ClubHome
中,则为每个芝加哥(1, 1)
提取ScoreHome
。如果芝加哥位于ClubAway
中,则为每个芝加哥(4,1)
提取ScoreAway
。接下来,我想计算芝加哥的总点数,并希望得到1, 4, 1, 1
。
1.当然,我希望为Next中ClubHome列中的其他团队获得相同的结果,例如,New York、Dallas以及示例中未包括的其他团队。对于Chicago,我希望恢复1, 4, 1, 1
;对于New York,我希望恢复2, 3, 2
;对于Dallas,我希望恢复0, 3, 1
。以及我在示例中没有输入的列中的其他俱乐部
- 结果**
| 俱乐部之家|俱乐部之路|锦标赛|圆形|得分之家|得分|
| - ------| - ------| - ------| - ------| - ------| - ------|
| 芝加哥|多伦多|非霍奇金淋巴瘤|八个|1个|第二章|
| 纽约|拉斯维加斯|非霍奇金淋巴瘤|八个|第二章|三个|
| 达拉斯|芝加哥|非霍奇金淋巴瘤|七|无|四个|
| 渥太华|纽约|非霍奇金淋巴瘤|七|三个|三个|
| 芝加哥|布法罗萨博|非霍奇金淋巴瘤|六个|1个|无|
| 拉斯维加斯|芝加哥|非霍奇金淋巴瘤|六个|四个|1个|
| 纽约|达拉斯|非霍奇金淋巴瘤|五个|第二章|三个|
| 达拉斯|布法罗萨博|非霍奇金淋巴瘤|五个|1个|第二章|
1.我认为(但我可能错了)我需要像内部连接这样的东西,因为Next表中ClubHome列的Chicago ...必须匹配Results表中的BOTHClubHome和ClubAway。也许我错了。我需要循环for x in my.fetchall()
是必要的,因为我已经开始使用循环以这种方式编写项目了
- 输出**
我想得到这些输出:
Chicago-Minnesota, (1, 4, 1, 1)
New York-Los Angeles,(2, 3, 2)
Dallas-Vegas Gold, (0, 3, 1)
...and other clubs
my = cursor.execute('''SELECT Next.ClubHhome||"-"||Next.ClubAway,
Results.ScoreHome, Results.ScoreAway
FROM Next
INNER JOIN Results
ON
Next.ClubHhome = Results.ClubHhome OR Results.ClubAway
''')
for x in my.fetchall():
print(x)
P. S:我使用Sqlite
1条答案
按热度按时间chhkpiq41#
现在还不清楚你到底想要什么,但我会回答你什么时候想要next.clubhome中每支球队的所有分数,每一个分数一行。
从下一个选择,然后根据结果加入。根据results.clubhome或results.clubaway加入。你几乎已经得到了它。
Next.ClubHome = Results.ClubHome OR Results.ClubAway
意味着(Next.ClubHome = Results.ClubHome) OR Results.ClubAway
,所以只要Results.ClubAway
为真,它就会为真。你想要的是Next.ClubHome = Results.ClubHome OR Next.ClubHome = Results.ClubAway
或Next.ClubHome in (Results.ClubHome, Results.ClubAway)
。如果你想在next中包括所有的团队,即使他们在结果中没有行,使用左连接。
然后使用case语句来决定使用哪一个得分列。检查next.clubhome是否与results.clubhome或clubaway匹配。
如果希望每个队占一行,请按next.clubhome分组,并使用
group_concat
将每个队的所有分数连接到一个列表中。Demonstration .