我有一个相当复杂的MySQL查询,旨在从下表中检索球队及其联赛表现:
团队
Error Code: 1052. Column 'table2.idProjet' in on clause is ambiguous
division_season_team
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(80) | NO | UNI | NULL | |
| primary_colour | varchar(30) | YES | | NULL | |
| secondary_colour | varchar(30) | YES | | NULL | |
| tertiary_colour | varchar(30) | YES | | NULL | |
| logo_url | text | YES | | NULL | |
| narrative | text | YES | | NULL | |
| club_id | int(10) unsigned | YES | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+------------------+------------------+------+-----+---------+----------------+
team_point_adjustments
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| division_id | int(10) unsigned | YES | MUL | NULL | |
| season_id | int(10) unsigned | YES | MUL | NULL | |
| team_id | int(10) unsigned | YES | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
匹配
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| point_adjustment | int(11) | NO | | 0 | |
| reason | varchar(191) | NO | | NULL | |
| reason_date | date | NO | | NULL | |
| team_id | int(10) unsigned | YES | MUL | NULL | |
| season_id | int(10) unsigned | YES | MUL | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+------------------+------------------+------+-----+---------+----------------+
以下是查询:
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| home_score | int(11) | NO | | 0 | |
| away_score | int(11) | NO | | 0 | |
| division_id | int(10) unsigned | YES | MUL | NULL | |
| season_id | int(10) unsigned | YES | MUL | NULL | |
| home_id | int(10) unsigned | YES | MUL | NULL | |
| away_id | int(10) unsigned | YES | MUL | NULL | |
| match_date | datetime | NO | | NULL | |
| court | int(10) unsigned | NO | | NULL | |
| round | int(10) unsigned | NO | | NULL | |
| played | tinyint(1) | NO | | 0 | |
| walkover | tinyint(1) | NO | | 0 | |
| home_adjust | int(11) | NO | | 0 | |
| away_adjust | int(11) | NO | | 0 | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
以下结果为例:
"SELECT
t.name AS team_name,
t.id as team_id,
SUM(win) AS win,
SUM(draw) AS draw,
SUM(loss) AS loss,
SUM(goals_for) AS goals_for,
SUM(goals_against) AS goals_against,
SUM(goal_difference) as goal_difference,
SUM(games_played) AS games_played,
SUM(points) + IFNULL(tpa.point_adjustment, 0) as points
FROM teams t
LEFT JOIN team_point_adjustments tpa
ON t.id = tpa.team_id
AND (tpa.season_id = 1 OR tpa.season_id IS NULL)
INNER JOIN
division_season_team dst
ON t.id = dst.team_id
LEFT JOIN (
SELECT home_id
team_name,
IF(home_SCORE > away_score, 1,0) win,
IF(home_score = away_score, 1,0) draw,
IF(home_score < away_score, 1,0) loss,
home_score goals_for,
away_score goals_against,
home_score - away_score goal_difference,
1 games_played,
CASE WHEN home_score > away_score THEN 5 WHEN home_score = away_score THEN 2 ELSE 0 END points
FROM matches mat WHERE played = 1 AND season_id = 1 AND division_id = 1
UNION ALL
SELECT away_id,
IF(home_score < away_score, 1, 0),
IF(home_score = away_score, 1,0),
IF(home_score > away_score, 1,0),
away_score,
home_score,
away_score - home_score goal_difference,
1 games_played,
CASE WHEN home_score < away_score THEN 5 WHEN home_score = away_score THEN 2 ELSE 0 END
FROM matches
WHERE played = 1 AND season_id = 1 AND division_id = 1
) AS total ON total.team_name=t.id WHERE dst.season_id = 1 AND dst.division_id = 1
GROUP BY t.id
ORDER BY points DESC, goal_difference DESC"
问题出在{
"team_name": "Jets",
"team_id": 20,
"win": "8",
"draw": "0",
"loss": "4",
"goals_for": "354",
"goals_against": "265",
"goal_difference": "89",
"games_played": "12",
"points": 40
}
上的第一个左联接。如果两行匹配,即有2行对应于一个团队,则返回的数据将增加一倍-比赛次数,获胜次数,得分等均应达到的两倍。
尝试为此子查询添加group by子句,但出现语法错误。如果此左联接中只有一个匹配的行,则数据都是正确的。
答案 0 :(得分:-2)
如果重复行中的数据完全相同,则DISTINCT将在此处提供帮助
“ SELECT DISTINCT t.name AS team_name, t.id为team_id, SUM(win)AS赢, SUM(draw)AS抽奖, SUM(损失)AS损失, SUM(goals_for)AS目标_for, ...”等等