选择另一列匹配记录-Oracle SQL
我有一个疑问:选择另一列匹配记录-Oracle SQL,sql,oracle,Sql,Oracle,我有一个疑问: SELECT t1.*, ( SELECT MIN(t2.e_nm) FROM table2 t2 WHERE t2.c_type = t1.c_type AND t2.h_level = t1.
SELECT
t1.*,
(
SELECT
MIN(t2.e_nm)
FROM
table2 t2
WHERE
t2.c_type = t1.c_type
AND t2.h_level = t1.h_level
AND t2.loop = t1.loop
AND t2.e_id = t1.e_id
HAVING
COUNT(*) = 1
) AS e_nm
FROM
table1 t1
ORDER BY
t1.f_name,
t1.line_num;
当从表2中选择e_nm作为第二个参数时,我还想从表1中获取另一列匹配记录-seq_nm
如何在上面的查询中执行此操作?如果计数(*)
=1,则可以使用带有聚合的联接
SELECT t1.*, t2.e_nm, t2.x
FROM table1 t1 LEFT JOIN
(SELECT t2.c_type, t2.h_level, t2.loop, t2.e_id,
MIN(t2.e_nm) as e_nm, MIN(x) as x
FROM table2 t2
GROUP BY t2.c_type, t2.h_level, t2.loop, t2.e_id
HAVING COUNT(*) = 1
) t2
ON t2.c_type = t1.c_type AND
t2.h_level = t1.h_level AND
t2.loop = t1.loop AND
t2.e_id = t1.e_id
ORDER BY t1.f_name, t1.line_num;
这是因为您的计数(*)=1
,因此只有一行匹配。如果没有,您仍然可以使用KEEP
:
MIN(x) KEEP (DENSE_RANK FIRST ORDER B t2.e_num ASC) as x