一对多关系的外连接(Hibernate / SQL)

时间:2011-11-04 10:59:25

标签: sql hibernate

我想在一对多关系(使用SQL或Hibernate)上进行外连接,我是在尝试错误的语法,还是设计不可能?

我们举一个简单的例子:用户可以更改参数的值。对于没有用户值的参数,使用默认值:

Table **PARAMETER** :
PAR_ID
PAR_NAME
PAR_DEFAULT_VALUE

Table **USER_PARAMETER** :
UP_ID
UP_PAR_ID
UP_US_ID
UP_CUSTOM_VALUE

Table **USER** :
US_ID
US_LOGIN

对于给定的用户,我想列出所有参数及其默认值及其自定义值(如果用户已给出一个)(如果该用户没有任何自定义值,则为“null”)。

我已尝试过以下请求,但如果用户没有自定义值,则不返回任何内容:

SELECT PAR_NAME, PAR_DEFAULT_VALUE, UP_CUSTOM_VALUE
FROM PARAMETER
LEFT JOIN USER_PARAMETER on UP_PAR_ID = PAR_ID
WHERE UP_US_ID = 1

我希望每个现有参数都填充PAR_NAME和PAR_DEFAULT_VALUE,并为用户自定义参数填充UP_CUSTOM_VALUE(其他参数为“null”)。

1 个答案:

答案 0 :(得分:1)

将条件us_id = 1where子句移到on子句:

select  *
from    parameter p
left join
        user_parameter up
on      up.up_par_id = p.par_id
        and up.up_us_id = 1

这将导致条件作为left join的一部分应用,它只会过滤掉右侧表格中的行。 where子句不知道左或右。

查看此示例数据,了解为什么where条件会过滤掉没有自定义值的所有行:

par_id   default_value   user_id  custom_value
1        1              1       2             --> works
2        1              null    null          --> filtered out by UP_US_ID = 1