从oracle中的两个表中获取数据

时间:2017-08-18 05:58:18

标签: database oracle

我有两个结果集:

设置1:

STUDENT| COUNT
------ | ------
mohit  | 4 
Rohit  | 2
Tanvi  | 2
Jhanvi | 1

设置2:

STUDENT| COUNT_STAR
------ | ------
mohit  | 2 
Rohit  | 3
Tanvi  | 1
Arjun  | 1
Abhay  | 3
Abhi   | 1

预期结果集:

STUDENT| COUNT  | COUNT_STAR
------ | ------ | ----------
mohit  |  4     |  2
Rohit  |  2     |  3
Tanvi  |  2     |  1
Arjun  |  na    |  1
Abhay  |  na    |  3
Abhi   |  na    |  1
Jhanvi |  1     |  na

有人可以帮我解决SQL查询吗?

4 个答案:

答案 0 :(得分:0)

你需要一个联盟才能从表中获取不同的名称 并且左连接获取计数count_star的值

  select T.STUDENT , table1.count, table2.count_star
  from  (

    select STUDENT
    from table1
    UNION 
    select STUDENT
    from table2
  ) T
  left join table1 on table1.student = t.student
  left join table2 on table1.student = t.student

答案 1 :(得分:0)

使用FULL OUTER JOIN连接两个重叠的结果集:

select coalesce(table1.student, table2.student) as student
       , nvl( table1.count, 'na') as count
       , nvl( table2.star_count, 'na') as star_count
from table1
     full outer join table2
     on table1.student = table2.student

答案 2 :(得分:0)

您可以使用FULL OUTER JOIN获得所需的结果 -

SELECT DECODE (a.STUDENT, NULL, b.STUDENT, a.STUDENT) STUDENT,
       a.COUNT,
       b.count_star
  FROM table1 a FULL OUTER JOIN table2 b ON a.STUDENT = b.STUDENT;

希望这有帮助。

答案 3 :(得分:0)

以下SQL使用Oracle 12G进行测试:

SELECT COALESCE (T1.STUDENT, T2.STUDENT) AS STUDENT,
       DECODE (T1.COUNT, NULL, 'na', T1.COUNT) COUNT,
       DECODE (T2.COUNT_STAR, NULL, 'na', T2.COUNT_STAR) COUNT_STAR
  FROM TABLE1 T1
       FULL OUTER JOIN TABLE2 T2 ON T1.STUDENT = T2.STUDENT;