我正在尝试编写表面上应该是相对简单的SQL查询 - 然而,我无法让它们发挥作用。
是否可以编写如下所示的查询:
select t.name
from (select *
from mystoredproc(1,2,3) as t)
where t.name = 'foobar'
上述查询存在两个问题:
1)首先,上述声明起作用。我的db引擎(mySQL)抱怨:
ERROR 1054(42S22):未知列 '字段列表'中的't.name'
2)我想使用返回的表t 在自我加入。但是,我不想要 必须调用mystoredproc(...) 再次,因为它是非常的 昂贵的电话。
任何人都知道如何解决这些问题吗?
顺便说一句,即使我正在使用mySQL(现在),我更愿意,如果任何提供的SQL片段是db不可知的(即ANSI SQL)答案 0 :(得分:11)
将) as t)
替换为) t
,如
select t.name from (select * from mystoredproc(1,2,3)) t where t.name = 'foobar'
对于您的第二个问题:将结果从mystoredproc
反馈到临时表中并SELECT
,然后您就可以毫不费力地进行自我加入。