テーブル交差点を持つ2つのテーブルからnullでない場合を除き、最大値を選択します。SQLクエリ
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
を私はに基づいて情報を取ることができるようにしたいですファイルのリビジョンがNULLの場合は、最も高いリビジョンのファイルのレコードを返します。 fileRevがnullでない場合、そのリビジョンに対応するファイルレコードを返します。
私はそうのようにそれを複製することができました:私はより最適化されたクエリでこれを行うことができますどのように
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
?おそらく組合なし?
を返している場合、それはsqlfiddle(http://sqlfiddle.com/)を追加するのはとても便利です人々はデータを利用して自分自身で試すことができます。 – Jester