晚上好,
我有以下两张表:
*----------------------------*
| user | script_id | name |
*----------------------------*
| 408 | 1 | script1 |
| 408 | 3 | script2 |
*----------------------------*
*--------------------------------*
| id | version | script |
*--------------------------------*
| 1 | 1 | print "script1" |
| 1 | 2 | print "script2" |
| 3 | 0 | print "other1" |
| 3 | 1 | print "other2" |
*--------------------------------*
表scripts
包含有关脚本的一些常规信息,例如其名称和所有者的用户ID。表script_versions
包含每个脚本的所有不同版本的代码。
现在我要从数据库中检索:
我想获得给定version
的所有脚本的最新版本(即最高user
个数字。)
例如,对于给定的数据,查询应该返回:
*-------------------------------------------------*
| id | version | script | user | name |
*-------------------------------------------------*
| 1 | 2 | print "script2" | 408 | script1 |
| 3 | 1 | print "other2" | 408 | script2 |
*-------------------------------------------------*
这是我现在的询问。它不起作用,因为它并不总是选择最新版本(事实上,它目前总是选择最旧的)所有脚本。
代码:
SELECT *
FROM scripts
LEFT
JOIN
( SELECT *
FROM script_versions
GROUP
BY id
ORDER
BY version DESC
) AS versions
ON scripts.script_id = versions.id
WHERE scripts.user = ?
这个问题不是this question的重复,因为提到的不是关于排序/排序结果(通过最新版本)。
答案 0 :(得分:1)
尝试
select scripts.id, v.version, v.script, scripts.user, scripts.name
from scripts s
inner join
(select id, max(version) as version from script_versions group by id) aux
on aux.id = s.script_id
inner join script_versions v on v.id = aux.id and v.version = aux.version
where user = ?