上周我发布了一个关于在Microsoft Query中使用子查询的问题,虽然我在那个实例中的问题没有解决,但我发现问题比以前的情况要简单得多。
我通过ODBC在Microsoft Query(来自Excel 2010)中尝试连接到Informix数据库以执行简单查询,并且在尝试使子查询的语法正确时遇到了很多麻烦。我有一种感觉,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中使用的语法必须针对数据源进行定制。然而,当我抬起头来Informix's syntax for subqueries in the FROM clause时,我更加困惑,因为看起来我按照他们的语法来发球,因为他们的例子是:
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);
我彻底迷失了。非常感谢任何帮助!
答案 0 :(得分:1)
您是否尝试过像这样的表别名:
SELECT a.* FROM
(
SELECT x0.id, x0.creation_date
FROM coastal.waybill x0
) a
我过去常常对MS数据库进行MS查询,而子查询不需要别名,然后我转移到需要它们的MS SQL。