我想在一对多关系(使用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”)。
答案 0 :(得分:1)
将条件us_id = 1
从where
子句移到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