Итак, у меня есть модель данных, которая настроена с таблицей, содержащей столбцы NAME
, ID
и CONDITION
для ряда объектов (каждый объект имеет уникальный идентификационный номер). Остальные атрибуты для этих объектов содержатся в столбцах нескольких соответствующих таблиц в зависимости от типа объекта (с каждым типом связаны разные атрибуты). Все таблицы определенного типа имеют столбец ID
, чтобы объекты можно было сопоставить с основным списком.
Я хочу написать sql-запрос, который будет возвращать информацию об объектах нескольких разных типов на основе CONDITION
, привязанного к их уникальному 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|
Как видите, нет никакой корреляции между NAME
и типом или ID
и типом. В настоящее время я работаю в 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, я считаю, что это происходит:
Где круг «А» представляет мой основной список.
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
в основной список.
Заранее спасибо за любые ответы.