Смущающе легкий вопрос SQL

Я пытаюсь написать то, что якобы должно быть относительно простым SQL-запросом - но я не могу заставить их работать.

Можно ли написать запрос, который выглядит примерно так:

select t.name 
  from (select * 
          from mystoredproc(1,2,3) as t) 
 where t.name = 'foobar'

Две проблемы с вышеуказанным запросом:

1) Прежде всего, утверждение выше не работает. Мой движок БД (mySQL) жалуется:

ОШИБКА 1054 (42S22): неизвестный столбец "t.name" в "списке полей"

2) Я хочу использовать возвращенную таблицу t в САМОМ СОЕДИНЕНИИ. Однако я не хочу снова вызывать mystoredproc(...), потому что это ОЧЕНЬ дорогой вызов.

Кто-нибудь знает, как исправить эти проблемы?

Кстати, хотя я использую mySQL (на данный момент), я бы предпочел, чтобы любой предложенный фрагмент SQL был независим от БД (т.е. ANSI SQL)

1 ответ

Решение

Заменить ) as t) с ) t, как в

select t.name from (select * from mystoredproc(1,2,3)) t where t.name = 'foobar'

Для вашей второй проблемы: кормите результат из mystoredproc во временную таблицу и SELECT Исходя из этого, вы можете объединиться без проблем.

Другие вопросы по тегам