我有什么
我在MySQL数据库(5.6.35版)中有以下两个表。
CREATE TABLE `Runs` (
`Name` varchar(200) NOT NULL,
`Run` varchar(200) NOT NULL,
`Points` int(11) NOT NULL
) DEFAULT CHARSET=latin1;
INSERT INTO `Runs` (`Name`, `Run`, `Points`) VALUES
('John', 'A08', 12),
('John', 'A09', 3),
('John', 'A01', 15),
('Kate', 'A02', 92),
('Kate', 'A03', 1),
('Kate', 'A04', 33),
('Peter', 'A05', 8),
('Peter', 'A06', 14),
('Peter', 'A07', 5);
CREATE TABLE `Users` (
`Name` varchar(500) NOT NULL,
`NumberOfRun` int(11) NOT NULL
) DEFAULT CHARSET=latin1;
INSERT INTO `Users` (`Name`, `NumberOfRun`) VALUES
('John', 2),
('Kate', 1),
('Peter', 3);
ALTER TABLE `Runs`
ADD PRIMARY KEY (`Run`);
我的目标是什么
约翰有
Users.NumberOfRun=2
,所以我将从
Runs
桌子
凯特有
Users.NumberOfRun=1
,所以我将从
跑
桌子
彼得有
Users.NumberOfRun=3
,所以我将从
跑
桌子
我想得出以下结果
+-------+-----+--------+
| Name | Run | Points |
+-------+-----+--------+
| John | A01 | 15 |
| John | A08 | 12 |
| Kate | A02 | 92 |
| Peter | A06 | 14 |
| Peter | A05 | 8 |
| Peter | A07 | 5 |
+-------+-----+--------+
我试过的
首先,如果它是SQL Server,我将使用
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ) AS [rn]
对运行表执行函数,然后生成
JOIN
与
Users
上的表
Users.NumberOfRun<=[rn]
.
我读过了
this
文件,但似乎
PARTITONING
在MySQL中,它是从8.x版开始提供的,但我使用的是5.6.x版。
SELECT t0.Name,t0.Run
FROM Runs AS t0
LEFT JOIN Runs AS t1 ON t0.Name=t1.Name AND t0.Run=t1.Run AND t1.Points>t0.Points
WHERE t1.Points IS NULL;
但它并没有给出行号,这本质上是为了我像上面描述的那样进行连接。