Столбец foo not found tablename - Teradata - PullRequest
0 голосов
/ 04 июня 2018

Я использую 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.

Я пытаюсь найти запись, где *Значение 1007 * равно foo, но кажется, что foo - это имя столбца, кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Строки ограничиваются одинарными кавычками в 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');

Thisверсия не будет возвращать дубликаты, если несколько строк совпадают в table2.Это обычно желательно.

0 голосов
/ 04 июня 2018

Вы в скобках в IN

SELECT column1
FROM table1
INNER JOIN table2
ON table1.column2 = table2.column3
WHERE table2.column4 IN ("foo");
0 голосов
/ 04 июня 2018

Оператор IN работает, сравнивая значение с массивом значений, это будет что-то вроде:

WHERE table2.column4 IN ('foo')

Но массив только для одного значения может быть слишком большим, поэтому я думаю, что лучший подход будетиспользовать = оператор

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