【问题标题】:Column foo not found tablename - Teradata未找到列 foo 表名 - Teradata
【发布时间】:2018-11-14 00:05:04
【问题描述】:

我正在使用 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 是列名,有人可以帮我吗?

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    在 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 中的多行匹配,此版本将不会返回重复项。这通常是可取的。

    【讨论】:

    • 啊,我就知道这很愚蠢。感谢您的快速回答和洞察力!
    【解决方案2】:

    IN括号中的你

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

    【讨论】:

    • 在标准 SQL 中,双引号字符串是标识符,即表/列名。文字需要用单引号括起来。
    【解决方案3】:

    运算符 IN 将一个值与一个值数组进行比较,它类似于:

    WHERE table2.column4 IN ('foo')
    

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

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

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    • 在标准 SQL 中,双引号字符串是标识符,即表/列名。文字需要用单引号括起来。
    • 感谢您的帮助!
    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2017-02-27
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多