首页 > 解决方案 > 如何在 WHERE 子句中使用 SELECT 查询的结果

问题描述

来自 Teradata,我通常会创建一个 volatile 表,其中包含一些我将在整个代码中使用的变量。

例如,

create volatile table var as (
select 'filter_value' as var_field
) with data on commit preserve rows;

然后我会在 SELECT WHERE 子句中使用该表:

select * from table
where some_field = (select var_field from var);

我正在尝试在 HUE(Impala 编辑器)中做类​​似的事情,但是出现错误:

create table var as
select 'filter_value' as var_field

select * from table
    where some_field = (select var_field from var)

AnalysisException:第 5 行中的语法错误:未定义:来自 table-name-hidden ^ 遇到:FROM 预期:CASE、CAST、DEFAULT、EXISTS、FALSE、IF、INTERVAL、NOT、NULL、REPLACE、TRUNCATE、TRUE、IDENTIFIER 原因:例外:语法错误

有谁知道如何在 Hue 中执行此操作或复制此功能?

不必在整个代码中定义我的变量并将它们全部放在一个表的顶部很方便。

标签: hiveqlimpalahue

解决方案


我有一个解决方案。我在顺化中尝试过,我能够实现你的目标。

Teradata 中使用的查询:

查询一:

create volatile table var as (
select 'filter_value' as var_field
) with data on commit preserve rows;

查询 2:

select * from table
where some_field = (select var_field from var);

在 Impala 中适用于与上述相同场景的查询:

查询一:

create table var as
select 'filter_value' as var_field;

查询 2:

SELECT * FROM test
where test_field in (select var_field from var);

执行测试的步骤:

1. 可变表创建:

create table var as
select 'filter_value' as var_field;

+-------------------+
| summary           |
+-------------------+
| Inserted 1 row(s) |
+-------------------+

2. 易失表数据检查:

SELECT * FROM var;

+--------------+
| var_field    |
+--------------+
| filter_value |
+--------------+

3. 样表创建和数据插入:

CREATE TABLE test 
(test_field string);

Fetched 0 row(s) in 0.81s

----

INSERT INTO test
values ("filter_value");

Modified 1 row(s) in 5.64s

----

INSERT INTO test
values ("filter_value2");

Modified 1 row(s) in 0.32s
----

4、样表数据校验:

select * from test;

+---------------+
| test_field    |
+---------------+
| filter_value  |
| filter_value2 |
+---------------+

5. 目标:

SELECT * FROM test
where test_field in (select var_field from var);

+--------------+
| test_field   |
+--------------+
| filter_value |
+--------------+

推荐阅读