hive> select t.id
> ,t.name
> ,t.clazz
> ,t.score_id
> ,t.score
> ,c.subject_name
> from(
> select a.id
> ,a.name
> ,a.clazz
> ,b.score_id
> ,b.score
> from (
> select id
> ,name
> ,clazz
> from
> students
> ) a left join (
> select id
> ,score_id
> ,score
> from score
> ) b
> on a.id = b.id
> ) t left join (
> select subject_id
> ,subject_name
> from subject
> ) c on t.score_id = c.subject_id
> limit 10;
OK
1500100001 施笑槐 文科六班 1000001 98 语文
1500100001 施笑槐 文科六班 1000002 5 数学
1500100001 施笑槐 文科六班 1000003 137 英语
1500100001 施笑槐 文科六班 1000004 29 政治
1500100001 施笑槐 文科六班 1000005 85 历史
1500100001 施笑槐 文科六班 1000006 52 物理
1500100002 吕金鹏 文科六班 1000001 139 语文
1500100002 吕金鹏 文科六班 1000002 102 数学
1500100002 吕金鹏 文科六班 1000003 44 英语
1500100002 吕金鹏 文科六班 1000004 18 政治
Time taken: 17.529 seconds, Fetched: 10 row(s)
// with as 可以把子查询拿出来,让代码逻辑更加清晰,提高效率
// 必须跟着sql一起使用
hive> with tmp1 as (
> select id
> ,name
> ,clazz
> from students
> ), tmp2 as (
> select score_id
> ,id
> ,score
> from
> score
> ), tmp1Jointmp2 as (
> select a.id
> ,a.name
> ,a.clazz
> ,b.score_id
> ,b.score
> from tmp1 a
> left join tmp2 b
> on a.id = b.id
> ), tmp3 as (
> select subject_id
> ,subject_name
> from subject
> ) select t.id
> ,t.name
> ,t.clazz
> ,t.score_id
> ,t.score
> ,c.subject_name
> from tmp1Jointmp2 t left join tmp3 c
> on t.score_id = c.subject_id
> limit 10;
OK
1500100001 施笑槐 文科六班 1000001 98 语文
1500100001 施笑槐 文科六班 1000002 5 数学
1500100001 施笑槐 文科六班 1000003 137 英语
1500100001 施笑槐 文科六班 1000004 29 政治
1500100001 施笑槐 文科六班 1000005 85 历史
1500100001 施笑槐 文科六班 1000006 52 物理
1500100002 吕金鹏 文科六班 1000001 139 语文
1500100002 吕金鹏 文科六班 1000002 102 数学
1500100002 吕金鹏 文科六班 1000003 44 英语
1500100002 吕金鹏 文科六班 1000004 18 政治
Time taken: 19.74 seconds, Fetched: 10 row(s)