【问题标题】:Embarassingly easy SQL question(s)令人尴尬的简单 SQL 问题)
【发布时间】:2010-12-28 08:41:06
【问题描述】:

我正在尝试编写表面上应该是相对简单的 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 在 SELF JOIN 中。然而,我不想要 必须调用 mystoredproc(...) 再次,因为它是一个非常 昂贵的电话。

有人知道如何解决这些问题吗?

顺便说一句,即使我正在使用 mySQL(目前),我希望任何提供的 SQL sn-p 与 db 无关(即 ANSI SQL)

【问题讨论】:

    标签: mysql sql stored-procedures mysql-error-1054


    【解决方案1】:

    ) as t) 替换为) t,如

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

    对于您的第二个问题:将mystoredproc 的结果输入到临时表中并从中输入SELECT,然后您可以轻松地进行自联接。

    【讨论】:

    • 很好......虽然潜在的问题,因为这是一个网络后端,我需要区分连续调用。我正在考虑为每组记录自动生成一个密钥,但我可能会让事情变得过于复杂 - 这里有什么想法..?
    • 临时表只对创建它的数据库连接可见。因此,即使您有多个并发调用,所有这些调用都是CREATE TEMPORARY TABLE myTempTable,每个连接也只能访问该表中自己的一组数据。不过,您可能需要使用事务,否则表格可能会在查询过程中消失。
    最近更新 更多