ON 子句具有子查询的两个表上的右外连接
Posted
技术标签:
【中文标题】ON 子句具有子查询的两个表上的右外连接【英文标题】:Right outer join on two tables where ON clause has a subquery 【发布时间】:2012-09-05 17:53:31 【问题描述】:我正在尝试对两个 liferay 表(users_
和 expandovalue
)执行右外连接以获取结果集。
当我对所有用户进行以下查询时,我得到了想要的结果。
SELECT USER_.FIRSTNAME
, USER_.LASTNAME
, USER_.EMAILADDRESS
, USER_.JOBTITLE
, expandovalue.data_
from expandovalue
right outer join
user_ on expandovalue.classpk = user_.userid
and expandovalue.columnid =35695;
当尝试对一组用户(用户组的一部分)执行相同操作时,它会出错。如下查询:
SELECT USER_.FIRSTNAME
, USER_.LASTNAME
, USER_.EMAILADDRESS
, USER_.JOBTITLE
, expandovalue.data_
from expandovalue
right outer join
user_ on expandovalue.classpk
in (select userid
from user_
where userid
in ( select userid
from users_usergroups
where usergroupid = 40073
) and status =0) = user_.userid in
(select userid
from user_
where userid
in ( select userid
from users_usergroups
where usergroupid = 40073
)
and status =0
) and expandovalue.columnid =35695
这是一个子查询,它给出了特定用户组中人员的userid
s。
(select userid
from user_
where userid in
( select userid
from users_usergroups
where usergroupid = 40073)
and status =0
)
我是不是走错了方向?请指教。
【问题讨论】:
1.您的查询缺少“AND”:...and status =0) = Smile AND user_.userid in... 2. 您使用的是哪个数据库? 在后端使用 Oracle 10g。究竟是一个和失踪。谢谢莱特 发布的一个好主意是包含错误消息。下次注意。欢迎来到堆栈溢出 【参考方案1】:试试这个查询:
SELECT USER_.FIRSTNAME,
USER_.LASTNAME,
USER_.EMAILADDRESS,
USER_.JOBTITLE,
expandovalue.data_
from expandovalue
right outer join user_
on expandovalue.classpk IN
(select userid
from user_
where userid in (select userid
from users_usergroups
where usergroupid = 40073) and
status = 0) AND
user_.userid in (select userid
from user_
where userid in (select userid
from users_usergroups
where usergroupid = 40073) AND
status =0) AND
expandovalue.columnid = 35695
第一个子查询结束后缺少一个“AND”。
【讨论】:
您应该从上面删除“= Smile”。 OP 在编辑中从原始问题中删除了此文本(单击问题的编辑时间以查看编辑历史记录),但显然您在编辑问题时已经在查看问题。删除“= Smile”后,我怀疑它会起作用。谢谢。以上是关于ON 子句具有子查询的两个表上的右外连接的主要内容,如果未能解决你的问题,请参考以下文章