私は2つのテーブルを持っていDocuments
ますRevisions
ドキュメント テーブル
+--------+--------------------+
| DataID | Description |
+--------+--------------------+
| 1 | This is document 1 |
| 2 | This is document 2 |
| 3 | This is document 3 |
| 4 | This is document 4 |
| 5 | This is document 5 |
+--------+--------------------+
リビジョン表
+--------+---------+-----------+
| DataID | Version | State |
+--------+---------+-----------+
| 1 | 1 | Published |
| 2 | 1 | Published |
| 3 | 1 | ? |
| 3 | 2 | Published |
| 4 | 1 | Published |
+--------+---------+-----------+
必要な出力
+--------+--------------------+---------+
| DataID | Description | Version |
+--------+--------------------+---------+
| 1 | This is document 1 | 1 |
| 2 | This is document 2 | 1 |
| 3 | This is document 3 | 2 |
| 4 | This is document 4 | 1 |
| 5 | This is document 5 | N/A |
+--------+--------------------+---------+
私のクエリ:
SELECT d.*, h.version
FROM documents d
LEFT revisions h
ON h.dataID=d.dataID
LEFT JOIN (
SELECT dataID, MAX(version) as version
FROM revisions
GROUP BY dataID
) dh
ON dh.dataID=h.dataID
AND dh.version=h.version
AND h.state='Published'
この左結合の問題は、version 1
のもリストdocid 3
しstate ?
ますが、公開されたバージョンがある場合はそれのみが必要です。そうでない場合は、バージョンが NULL のリスト ドキュメントをリストするだけです。
編集:バージョン番号だけでなく、エントリが見つかった場合は、データからすべての列データ
も欲しいことに注意してください
。revision