1
表结构:
教练表加入返回错误值的数据库
+----+-----------+-------+
| ID | Name | Age |
+----+-----------+-------+
| 1 | Aaron | 39 |
| 2 | John | 41 |
| 3 | Macy | 44 |
| 4 | Mitchelle | 37 |
| 5 | Candice | 32 |
+----+-----------+-------+
见习表
+----+---------+-------+
| ID | Name | Age |
+----+---------+-------+
| 6 | Abigail | 9 |
| 7 | Jim | 12 |
| 8 | Jack | 7 |
| 9 | Maria | 14 |
| 10 | Andy | 11 |
+----+---------+-------+
收费表
+----+----------+------------+--------+
| ID | Coach_ID | Trainee_ID | Fee |
+----+----------+------------+--------+
| 11 | 1 | 7 | 2400 |
| 12 | 2 | 6 | 2000 |
| 13 | 3 | 6 | 2000 |
| 14 | 4 | 8 | 1243 |
| 15 | 5 | 8 | 1275 |
| 16 | 3 | 9 | 9010 |
| 17 | 2 | 8 | 1900 |
| 18 | 1 | 7 | 600 |
| 19 | 2 | 10 | 1010 |
| 20 | 5 | 10 | 2110 |
+----+----------+------------+--------+
所需的输出
+-----------+--------------+--------+
| Name | Trainee_name | Fee |
+-----------+--------------+--------+
| Aaron | Jim | 2400 |
| Candice | Andy | 2110 |
| John | Abigail | 2000 |
| Macy | Maria | 9010 |
| Mitchelle | Jack | 1243 |
+-----------+--------------+--------+
=====
我的查询
Select
Coach.Name as Name, Trainee.Name as Trainee_name, Max(Fee.Fee) as Fee
From Fee
INNER JOIN Trainee
ON Fee.Trainee_ID = Trainee.ID
INNER JOIN Coach
ON Fee.Coach_ID = Coach.ID
GROUP BY Coach.Name
ORDER BY Coach.Name;
我的输出:
+------------+---------------+--------+
| Name | Trainee_name | Fee |
+------------+---------------+--------+
| Aaron | Jim | 2400 |
| Candice | Jack | 2110 |
| John | Abigail | 2000 |
| Macy | Abigail | 9010 |
| Mitchelle | Jack | 1243 |
+------------+---------------+--------+
对应于康迪斯和梅西的数据是在列trainee_name不正确。
转储SQL数据库的:
CREATE TABLE IF NOT EXISTS `coach` (
`ID` int(11) NOT NULL,
`Name` text NOT NULL,
`Age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `coach` (`ID`, `Name`, `Age`) VALUES
(1, 'Aaron', 39),
(2, 'John', 41),
(3, 'Macy', 44),
(4, 'Mitchelle', 37),
(5, 'Candice', 32);
CREATE TABLE IF NOT EXISTS `fee` (
`ID` int(11) NOT NULL,
`Coach_ID` int(11) NOT NULL,
`Trainee_ID` int(11) NOT NULL,
`Fee` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `fee` (`ID`, `Coach_ID`, `Trainee_ID`, `Fee`) VALUES
(11, 1, 7, 2400),
(12, 2, 6, 2000),
(13, 3, 6, 2000),
(14, 4, 8, 1243),
(15, 5, 8, 1275),
(16, 3, 9, 9010),
(17, 2, 8, 1900),
(18, 1, 7, 600),
(19, 2, 10, 1010),
(20, 5, 10, 2110);
CREATE TABLE IF NOT EXISTS `trainee` (
`ID` int(11) NOT NULL,
`Name` text NOT NULL,
`Age` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `trainee` (`ID`, `Name`, `Age`) VALUES
(6, 'Abigail', 9),
(7, 'Jim', 12),
(8, 'Jack', 7),
(9, 'Maria', 14),
(10, 'Andy', 11);
您需要在“费用表”中找到每位教练的最高金额(费用)并返回ID作为自己的记录集。然后从记录集中,您可以进行内部连接,以获取与正确的受训者相关的姓名和费用。 – abraxascarab
您的输出与您的查询输出有什么不同?你还使用了什么RDBMS? –
它确定杰克是2110费用的实习生,而不是安迪 – Danny