Смущающе легкий вопрос 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
Исходя из этого, вы можете объединиться без проблем.