列foo找不到tablename - Teradata

时间:2018-06-04 15:38:42

标签: sql teradata

我正在使用Teradata Express Studio进行此查询:

SELECT column1
FROM table1
INNER JOIN table2
ON table1.column2 = table2.column3
WHERE table2.column4 IN "foo";

我收到以下错误:

Executed as Single statement.  Failed [5628 : HY000] Column foo not found in table2 or table1.

我正在尝试搜索column4的值为foo的条目,但似乎认为foo是列名,有人可以帮助我这个吗?

3 个答案:

答案 0 :(得分:3)

字符串由SQL中的单引号分隔,您需要=而不是IN

SELECT column1
FROM table1 INNER JOIN
     table2
     ON table1.column2 = table2.column3
WHERE table2.column4 = 'foo';

我可能也建议将其写成:

SELECT t1.column1
FROM table1 t1
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t1.column2 = t2.column3 AND t2.column4 = 'foo');

如果table2中有多个行匹配,则此版本不会返回重复项。这通常是可取的。

答案 1 :(得分:0)

运算符IN将值与值数组进行比较,如下所示:

WHERE table2.column4 IN ('foo')

但只有一个值的数组可能太多,所以我认为最好的方法是使用= operator

SELECT column1
FROM table1
WHERE table1.column2 IN 
     (SELECT table2.column3
      FROM table2 
      WHERE table2.column4 = 'foo');

答案 2 :(得分:0)

您在IN

中的括号中
SELECT column1
FROM table1
INNER JOIN table2
ON table1.column2 = table2.column3
WHERE table2.column4 IN ("foo");