【发布时间】:2013-07-24 16:48:44
【问题描述】:
所以我有一个数据模型,它设置有一个表,其中包含一系列对象的NAME、ID 和CONDITION 列(每个对象都有一个唯一的 ID 号)。这些对象的其余属性包含在基于对象类型的几个相应表的列中(每种类型都有一些不同的属性)。所有特定类型的表都有一个ID 列,以便可以将对象匹配到主列表。
我想编写一个 sql 查询,该查询将根据与它们唯一的 ID 相关联的 CONDITION 返回有关几种不同类型对象的信息。
这是我正在使用的简化示例:
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 和 type 或 ID 和 type 之间没有关联。
我目前在 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 join 所做的研究,我相信这正在发生:
圆圈“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 列。
提前感谢您的任何回复。
【问题讨论】:
-
您能否根据您的示例表显示预期结果?
-
是的,好点。我将编辑我的问题。
标签: sql jasper-reports inner-join multiple-tables