【问题标题】:How do I tell SQL to run a command using another table as the input value?如何告诉 SQL 使用另一个表作为输入值运行命令?
【发布时间】:2015-02-11 17:23:16
【问题描述】:

我正在尝试构建一个查询,该查询将向我显示我的数据库中每个团队的积分数(无论如何作为开始)。我有两张表格,一张是球队名单,一张是比赛,格式为

周|主队|客队|主场得分|客场得分|结果|比赛ID

其中 Result 可以是 A(客场获胜)、H(主场获胜)或 D(平局)。我可以很容易地找到给定团队的积分数

SELECT
(SELECT COUNT(matches.Result)*3 FROM matches WHERE (HomeTeam='Arsenal' AND Result='H') OR (AwayTeam='Arsenal' AND Result='A')) +
(SELECT COUNT(matches.Result) FROM matches WHERE (HomeTeam='Arsenal' OR AwayTeam='Arsenal') AND Result='D');

我想做的是这样的:

FOR EACH teams.Team in teams
SELECT
(SELECT COUNT(matches.Result)*3 FROM matches WHERE (HomeTeam=Team AND Result='H') OR (AwayTeam=Team AND Result='A')) +
(SELECT COUNT(matches.Result) FROM matches WHERE (HomeTeam=Team OR AwayTeam=Team) AND Result='D');

不幸的是,这不起作用,我不太明白为什么。我做错了什么?

【问题讨论】:

    标签: mysql sql for-loop mariadb


    【解决方案1】:

    简单使用子查询:

    SELECT teams.Team,
    ((SELECT COUNT(matches.Result)*3 FROM matches WHERE (HomeTeam=teams.Team AND Result='H') OR (AwayTeam=Team AND Result='A')) +
    (SELECT COUNT(matches.Result) FROM matches WHERE (HomeTeam=teams.Team OR AwayTeam=teams.Team) AND Result='D')) as Points
    

    【讨论】:

    • 由于某种原因,我得到:错误 1109 (42S02):字段列表中的未知表“团队”。尽管在数据库中有表:MariaDB [prem]> SHOW TABLES; +----------------+ | Tables_in_prem | +----------------+ |比赛 | |团队 | +----------------+ 2 行(0.00 秒)
    • 我运行了一个较短的语句进行测试,得到了同样的错误:SELECT teams.Team, (SELECT COUNT (matches.Result) FROM matches);
    • 好的,我至少要运行一个语句:SELECT Team, (SELECT COUNT(Result)*3 FROM matches, teams WHERE (AwayTeam = teams.Team AND Result ='A') OR (HomeTeam =teams.Team AND Result ='H')) FROM 比赛,球队得分;然而,这只是带来了一个 3000 行的表,团队一遍又一遍地重复,所有的点都是“324”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2012-06-05
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多