SQL 查询 select 最大值,除非来自两个有交集的表不为空

SQL Query select max value unless not null from two tables with intersection

表:

Files
-------------------
id | revision
-------------------
1 | 0
1 | 1
1 | 2
2 | 0
2 | 1

Folders
-----------------
id | name
-----------------
1 | FooBar

Shares
--------------------------------
id | folderId | fileId | fileRev
--------------------------------
1  |     1    |    1   |   null
2  |     1    |    2   |    0

我期望的输出:

fileId | revision
------------------
 1     |     2
 2     |     0

我希望能够获取基于 Shares table 的信息,如果文件修订为 NULL,return 具有最高修订的该文件的记录。如果 fileRev 不为空,return 与该修订对应的文件记录。

我已经能够像这样复制它了:

SELECT f.id, max(f.rev) as rev
FROM files f
INNER JOIN shares s ON s.fileId = f.id
WHERE s.fileRev IS NULL AND s.folderId = 1
GROUP BY f.id
UNION
SELECT f.id, f.rev as rev 
FROM files f
INNER JOIN shares s ON s.fileId = f.id AND f.rev = s.fileRev 
WHERE s.fileRev IS NOT NULL AND s.folderId = 1

如何使用更优化的查询来执行此操作?可能没有工会?

我认为这应该可行,但在没有可用数据库的情况下很难测试。

IFNULL returns 或者 shares.fileRev 如果它不为空,如果它是 returns files.rev

SELECT files.id,
       MAX(IFNULL(shares.fileRev, files.rev)) as rev
FROM files
JOIN shares ON shares.fileId = files.id
WHERE shares.folderId = 1
GROUP BY files.id