【问题标题】:Subquery Syntax Discrepancy in Microsoft QueryMicrosoft Query 中的子查询语法差异
【发布时间】:2012-09-17 17:10:43
【问题描述】:

我上周发布了一个关于在 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 中使用的语法必须针对数据源进行定制。但是,当我查看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);

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

【问题讨论】:

  • 假设您有足够新的 Informix 版本,那么您使用的语法应该可以在 Informix 上正常工作。要获得一个不够新的版本,您必须使用不受支持的产品版本,而且可能是相当旧的版本。那么,您使用的是哪个版本的 Informix?如果它是 7.31(或者说是 7.30 或更高版本),那么您就不走运了。如果您使用的是 11.10 或更高版本,则应该没问题。这使得 9.30、9.40 和 10.00 版本(全部不支持)成为可能或可能不支持“FROM 子句中的子查询”的版本。
  • 非常感谢乔纳森提供的信息。我对与 DBMS 相关的事情非常缺乏经验,尤其是 Informix。我的公司使用了一个(严重)过时的 Informix 系统,我们正在升级该系统。我们运行的是 9.40 版的 Informix Dynamic Server,但运行的是 7.32 版的 IBM Informix-SQL。我查看了 9.40 的 page 6 of the guide,它说支持 FROM 子句子查询。是 Dynamic Server 还是 Informix-SQL 将决定对 SQL 语言功能的支持?
  • Informix Dynamic Server 将专门支持该表示法。 ISQL 是一组使用curses 库的前端工具,用于调解对服务器的访问。我忘记了早在 9.40 就添加了“FROM 子句中的子查询”;我以为它可能是 10.00,但我没有看过手册(懒惰)。所以,理论上,你应该是“好的”。 (Informix SQL 是单独版本的;7.50 是当前版本,7.32 是之前的版本。)
  • 如果问题仍然存在(我没有理由认为它不会),那么我想开始准确跟踪发送到 Informix 的 SQL。该消息看起来不像 Informix 消息;我倾向于认为客户端的某些东西(意思是 MS Query,或者可能是用于从 MS Query 访问 Informix 的驱动程序)在不应该抱怨的时候进行抱怨。但是,进行这种跟踪并非易事,而且我不是 Windows 专家。如果它是 Unix,那么我有一堆我可以使用的工具。您是否使用 ODBC 驱动程序或其他方式连接到 Informix?
  • 我正在使用 IBM Informix ODBC Driver v3.50 从 MSQuery 连接到 Informix。由于它看起来越来越像这样,这并不是我最初想的那样对我的语法进行快速修复的问题,所以我会看看我的 IT 人员对这一切的看法。

标签: sql excel syntax informix ms-query


【解决方案1】:

你有没有试过这样的表别名:

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

我过去经常使用 MS Query 来处理 Oracle 数据库,而子查询不需要别名,然后我转向 MS SQL,它确实需要它们。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2021-01-18
    • 1970-01-01
    相关资源
    最近更新 更多