1. 程式人生 > >Hive 子查詢

Hive 子查詢

SELECT col
FROM (
    SELECT a+b AS col
    FROM t1
    ) t2;

#包含union all:
SELECT t3.col
FROM (
    SELECT a+b AS col
    FROM t1
    UNION ALL
    select c+d AS col
    FROM t2
    ) t3

2.where子查詢
一般用於IN,EXISTS,NOT EXISTS
栗子:

SELECT * FROM A
WHERE A.a IN (
    SELECT foo FROM B);

SELECT A FROM
T1 WHERE EXISTS( SELECT B FROM T2 WHERE T1.X=T2.X );
查詢部門為’SALES‘和’ACCOUNTING‘的員工有哪些 解:先查出’SALES‘和’ACCOUNTING‘的部門號,然後再根據部門號再查詢emp表的員工姓名 select e.name from emp e where e.deptno in ( select d.deptno from dept d where d.dname='SALES' and d.dname='ACCOUNTING');

注意的問題:
–子查詢用括號
–Hive中只支援WHERE和FROM子句中的子查詢
–主查詢和子查詢可以不是同一張表
–子查詢中的空值問題,若子查詢中有空值Null時,主查詢不能使用IN或Not IN
子查詢中的空值處理:

--查詢所有員工的老闆的員工號,如果這個員工就是老闆,那它的資料就是空值
select * from emp e where e.empno not in (select e1.mgr from emp e1);  #會報錯,因為子查詢有空值
--正確的操作如下:
select * from emp e where e.empno not in (select e1.mgr from emp e1 where el.mgr is not null);