我的数据库中有两张表,一张保存文件的名称,另一张保存其中描述的信息记录,包括部分的大小。它可以描述为:
表 1:id 为整数,名称为 varchar
表2:recid为整数主键,file_id为整数,score为float
表之间有一个一对多的链接,从 Table1.id 到 table2.file_id。我需要的是对于名称与特定模式匹配的每个文件,检索具有最高分数的链接记录的 id 和分数本身。到目前为止,我已经使用过:
SELECT name,MAX(score)
FROM Table1
LEFT OUTER JOIN Table2 ON Table2.file_id=Table1.id
WHERE name LIKE :pattern
GROUP BY name
但我无法以这种方式检索 Table2 中记录的 id。
我使用的方言是 Sqlite。
应该使用什么查询来检索对每个文件具有最高分数的记录上的数据?
更新:
通过这个查询,我越来越接近我想要的:
SELECT name,score,recid
FROM Table1
LEFT OUTER JOIN Table2 ON file_id=id
WHERE name LIKE :pattern
GROUP BY name
HAVING score=MAX(score)
但是,这会忽略第一个表中在第二个表中没有对应条目的条目。无论如何,我如何确保它们是最终结果?我应该使用 UNION,如果是,如何使用?