2009-12-19 48 views
1

我想写什么应该表面上,是相对容易的SQL查询 - 但是,我不能让他们工作。令人难以忍受的SQL问题

是否可以编写一个查询,看起来像这样:

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

两个问题上面的查询:

1)首先关闭所有,上述dosent工作的陈述。我的数据库引擎(MySQL的)抱怨:

ERROR 1054(42S22):在 '字段列表'

2)我想使用返回表t未知列 't.name' 在一个自我加入。但是,我不想让 必须再次调用mystoredproc(...) ,因为它非常昂贵的调用。

任何人都知道如何解决这些问题?

顺便说一句,即使我使用MySQL的(现在),我宁愿如有递上SQL代码段是数据库无关的(即ANSI SQL)

回答

11

) t更换) as t),如

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

对于第二个问题:将mystoredproc的结果输入到临时表中,并从中输入SELECT,然后您就可以无障碍地进行自我连接。

+0

不错...潜在的问题,虽然这是一个网络后端,我需要区分成功的调用。我正在考虑为每组记录自动生成一个密钥,但我可能会过分复杂 - 这里有任何想法..? – 2009-12-19 17:49:18

+1

只有在创建临时表时才会看到临时表。所以,即使你有几个并发调用,所有的CREATE TEMPORARY TABLE myTempTable,每个连接都只能访问该表中的自己的一组数据。尽管您可能需要使用事务,否则该表可能会在查询中消失。 – 2009-12-19 17:54:11

+0

请查阅使用说明书:http://dev.mysql.com/doc/refman/5.0/en/create-table.html – 2009-12-19 17:55:05