0

私は PostgreSQL の新しいユーザーです。使用しようとしていますDISTINCT ONが、目標を達成できません。

これが私のデータベースの簡単なスケッチです:

  • バージョン管理されたファイル
  • モデルを含むフィールド (フォーム生成用)
  • n:nファイルのバージョンとフィールドの関係

ここに画像の説明を入力

指定したファイルのバージョンのフィールド セット全体を取得したいと考えています。
私の問題は、空の値を持つことができる (そしてそうする) ことです。FileVersion_Field 関係がありません。以下に例を示します。

FileVersion                            Field                                
+----------------+---------+---------+ +----------+-------+---------------+ 
| id_fileversion | id_file | version | | id_field | value | id_fieldmodel | 
+----------------+---------+---------+ +----------+-------+---------------+ 
| 1              | 1       | 1       | | 1        | Smith | 1             | 
| 2              | 1       | 2       | | 2        | 20    | 2             | 
+----------------+---------+---------+ | 3        | 25    | 2             | 
                                       +----------+-------+---------------+

FileVersion_Field             FieldModel
+----------------+----------+ +---------------+------+
| id_fileversion | id_field | | id_fieldmodel | type |
+----------------+----------+ +---------------+------+
| 1              | 1        | | 1             | Name |
| 1              | 2        | | 2             | Age  |
| 2              | 3        | +---------------+------+
+----------------+----------+ 

この例では、次の結果を得たいと考えています。

-- id_file=1 & version=1
Name | Smith
Age  | 20
-- id_file=1 & version=2
Name | 
Age  | 25

これが私が試したことですが、うまくいきません:

SELECT DISTINCT ON(FieldModel.id_fieldmodel) *
FROM File
LEFT JOIN FileVersion ON File.id_file = FileVersion.id_file
LEFT JOIN File_Field ON FileVersion.id_fileversion = File_Field.id_fileversion
LEFT JOIN Field ON File_Field.id_field = Field.id_file
RIGHT JOIN FieldModel ON (Field.id_fieldmodel = FieldModel.id_fieldmodel OR FieldModel.id_fieldmodel IS NULL)
WHERE (FieldModel.id_fieldmodel IS NOT NULL AND FileVersion.version = 2 AND File.id_file = 1)
   OR (File.id_fieldmodel IS NULL)
ORDER BY FieldModel.id_fieldmodel
4

0 に答える 0