如何获取内部查询字段作为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 FIELD IS NEEDED ON MY
SELECT QUERIES RESULT
FROM USERS
WHERE CONTACT_ID = V_CONTACT_ID
);
您的查询措辞方式允许您过滤每个用户联系人的旅行,但您无法访问相关用户的详细信息 - 因为主查询仅从旅行表中选择。
可能你想要一个
join
;这使您可以过滤数据集and使两个表的列可用于select
:
SELECT t.id, u.lang
INTO v_travel_id, v_lang
FROM travel_table t
INNER JOIN users u ON u.id = t.user_id
WHERE u.contact_id = v_contact_id
如果
users
表将匹配单行,则:
SELECT t.ID,
u.LANG
INTO V_TRAVEL_ID, V_LANG
FROM TRAVEL_TABLE t
INNER JOIN USERS u
ON u.MYID = t.USER_ID
WHERE CONTACT_ID = V_CONTACT_ID;
如果用户表可以匹配多行,那么您可以使用
LATERAL
连接并仅获得第一个匹配项:
SELECT t.ID,
u.LANG
INTO V_TRAVEL_ID, V_LANG
FROM TRAVEL_TABLE t
CROSS JOIN LATERAL (
SELECT LANG
FROM USERS
WHERE CONTACT_ID = V_CONTACT_ID
AND MYID = t.USER_ID
-- ORDER BY something
FETCH FIRST ROW ONLY
) u;