假设我有以下表格:
TABLE1:
ID number
NAME varchar
TABLE2:
ID number (foreign key from first table)
KEY varchar
VALUE varchar
表 2 可能包含表 1 中元素的记录,但并非总是如此。
我需要一个命名查询,它将获取表 1 中的所有 ID,如果可用,还需要表 2 上特定键的信息或空值(如果表 2 中没有记录),如下所示:
select Table1.Id, Table1.Name, Table2.Value
from Table1
left Join Table1.Table2
where Table1.Id in (?)
and Table2.key = 'someKey'
但是,此查询仅在 Table2 具有 Table1 中记录的数据时才会带来结果。
我已经将 Table1 和 Table2 之间的关系设置为:
<map name="Table2" table="Table2" cascade="all-delete-orphan" inverse="true" lazy="true" batch-size="20">
<cache usage="nonstrict-read-write"/>
<key column="ID"/>
<index column="KEY" type="string"/>
<one-to-many class="somePersistentClass"/>
</map>
如何构建一个可以满足我需要的查询?对于 DB2,这是我需要的有效查询:
select Table1.Id, Table1.name, Table2.Value
from Table1
left Join Table2 on Table1.id = Table2.id and Table2.key = 'someKey'
and Table1.Id in (....)
但是,我找不到命名查询进行外连接的方法,因此当我在 Table2 中没有结果时,我得到空值,假设我需要通过一个 KEY 过滤 Table2,而不是连接的 ID。