我正在使用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是列名,有人可以帮助我这个吗?
答案 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");