如何在select语句中获取内部查询的列作为输出?这里需要通过select语句返回users
表中的lang
。这个查询有可能吗?
SELECT ID, LANG -- THIS LANG IS NOT WORKING
INTO V_TRAVEL_ID, V_LANG
FROM TRAVEL_TABLE
WHERE USER_ID = (SELECT MYID, LANG -- this LANG column needs to be returned from the query
FROM USERS
WHERE CONTACT_ID = V_CONTACT_ID);
3条答案
按热度按时间csbfibhn1#
您的查询的措辞方式确实允许您过滤每个用户联系人的旅行,但您无法访问相关用户的详细信息-因为主查询仅从旅行表中选择。
也许你想要一个
join
代替;这允许您过滤数据集 * 和 *,使两个表的列可用于select
:tp5buhyn2#
如果
users
表将为travel_table
中的每一行匹配一行,则:如果
users
表可以匹配多个行,并且您希望匹配IN
过滤器的行为,并且只匹配其中一个,那么在Oracle 12中,您可以使用LATERAL
连接并仅获得第一个匹配:9rnv2umw3#
无论出于何种原因,如果你想使用子查询而不是内部连接,那么
cross apply
/cross join lateral
应该可以做到。, lateral
是最短的。:)要么
或
或
上面3个查询和原始查询的主要区别是,原始查询只能返回0或1行,而上面的任何一个查询都可以返回任意数量的匹配行。
从技术上讲,上述查询相当于(注意
any
关键字)