Итак, у меня есть модель данных, которая настроена с таблицей, содержащей 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-соединениях, я считаю, что это происходит:
Где круг «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
в основной список.
Заранее благодарим за любые ответы.
Вы можете показать ожидаемый результат основан на вашем примере таблицы? –
да, хорошо пункт. Я отредактирую свой вопрос. –