4

NAMEそのため、一連のオブジェクトの、ID、および列を含むテーブルで設定されたデータ モデルがありCONDITIONます (各オブジェクトには一意の ID 番号があります)。これらのオブジェクトの残りの属性は、オブジェクト タイプに基づいて、いくつかのそれぞれのテーブルの列に含まれています (各タイプに関連付けられたいくつかの異なる属性があります)。すべてのタイプ固有のテーブルにはID列があり、オブジェクトをマスター リストに一致させることができます。

CONDITION固有の に関連付けられた に基づいて、いくつかの異なるタイプのオブジェクトに関する情報を返す SQL クエリを作成したいと考えていますID

これは私が取り組んでいるものの簡単な例です:

object_master_list
| ID | NAME | CONDITION |
-------------------------
|1234|  obj1|       true|
|0000|  obj2|      false|
|1236|  obj3|       true|
|0001|  obj4|      false|
|5832|  obj5|       true|
|6698|  obj6|      false|
|6699|  obj7|      false|


obj_type_one
| ID | NAME |   HEIGHT   |
-------------------------
|1234|  obj1|    o1height|
|0000|  obj2|    o2height|
|5832|  obj5|    o5height|
|6699|  obj7|    o7height|


obj_type_two
| ID | NAME |   WEIGHT   |
-------------------------
|1236|  obj3|    o3height|
|0001|  obj4|    o4height|
|6698|  obj6|    o6height|

ご覧のとおり、NAMEand 型またはIDand 型の間に相関関係はありません。私は現在iReportで作業しており、クエリ デザイナーを使用して、必要に応じて手動で編集しています。

現在、クエリの例は次のようになります。

SELECT 
    object_master_list."NAME" AS NAME,
    obj_type_one."HEIGHT" AS HEIGHT,
    obj_type_two."WEIGHT" AS WEIGHT
FROM
    object_master_list INNER JOIN obj_type_one ON object_master_list."ID" =    
obj_type_one."ID"
    INNER JOIN obj_type_two ON obj_type_two."ID" = object_master_list."ID"
WHERE
    object_master_list."CONDITION" = 'true'

データから結果が返されません。私がSQL結合で行った調査から、これが起こっていると思います: SQL結合の問題

円 "A" は私のマスター リストを表します。

iReport は、各列のフィールドを使用して、クエリから返された値を行ごとに保存して利用します。理想的には、これで終わるはずです:

$F{NAME} which will receive the following values in succession ("obj1", "obj3", "obj5") 
$F{HEIGHT}  with value series (o1hieght, null, o5height)
$F{HEIGHT} with value series (null, o3weight, null)

私が推測するテーブル表現は次のようになります。

| NAME |  HEIGHT  |  WEIGHT  |
------------------------------
|  obj1|  o1height|      null|
|  obj3|      null|  o3weight|
|  obj5|  o5height|      null|

私の質問は、これをどのように達成するのですか?

以前に小規模でこれに遭遇したので、サブレポートを使用したり、複数のデータ セットを作成したりできることは認識していますが、率直に言って、私は多くのオブジェクト タイプを持っています。TYPEまた、マスター リストに列を追加することもできません。

返信ありがとうございます。

4

1 に答える 1