2

上周我发布了一个关于在 Microsoft Query 中使用子查询的问题,虽然我在那个实例中的问题没有得到解决,但我发现这个问题比以前的情况要基本得多。

我通过 ODBC 连接到 Informix 数据库,尝试在 Microsoft Query(来自 Excel 2010)中执行简单查询,但在尝试正确获取子查询的语法时遇到了很多麻烦。我有一种感觉,MSQuery 被一些与 Informix/ODBC 源相关的特性所困扰。我之所以这么想是因为如果我尝试使用 Excel 电子表格作为我的数据源的非常简单的子查询,则以下语法有效:

SELECT * FROM
(
SELECT x0.field1, x0.field2
FROM `C:\USERS\NAME\DIRECTORY\Test.xlsx`.`Sheet1$` x0
)

但是,当我使用 Informix 数据库中的子查询尝试相同的非常简单的查询时,

SELECT * FROM
(
SELECT x0.id, x0.creation_date
FROM coastal.waybill x0
)

我收到错误"Could not add the table '(select'."我只能推测 MSQuery 中使用的语法必须针对数据源进行定制。然而,当我在 FROM 子句中查找 Informix 的子查询语法时,我更加困惑,因为我似乎遵循了他们的语法,因为他们的例子是:

SELECT LIMIT 1 * FROM 
   (SELECT c.customer_num, c.lname, c.company, 
           c.phone, u.call_dtime, u.call_descr
                 FROM customer c, cust_calls u
                 WHERE c.customer_num = u.customer_num
    ORDER BY u.call_dtime DESC);

我彻底迷路了。任何帮助将不胜感激!

4

1 回答 1

1

您是否尝试过这样的表别名:

SELECT a.* FROM
(
SELECT x0.id, x0.creation_date
FROM coastal.waybill x0
) a

我曾经对 Oracle 数据库使用 MS Query 很多,而子查询不需要别名,然后我转移到确实需要它们的 MS SQL。

于 2012-11-29T22:41:38.503 回答