【问题标题】:Select from an union sub query and got a "join" error from vba adodb从联合子查询中选择并从 vba adodb 获得“加入”错误
【发布时间】:2013-08-06 18:11:57
【问题描述】:

我收到一条关于“JOIN 语句有语法错误”的错误消息,但我没有在语句中使用“JOIN”。 “abc.csv”和“efg.csv”都有相同的“datetime,price,change,high_low”字段。 我正在使用“Microsoft.Jet.OLEDB.4.0”的VBA“ADODB.Connection”

声明如下:

SELECT
 MAX(DateValue(`datetime`)) AS `date_from`
,MIN(DateValue(`datetime`)) AS `date_to`
FROM ((
        SELECT
         `datetime`
        , `price`
        , `change`
        , `high_low`
        FROM `abc.csv`)
    UNION (
        SELECT
         `datetime`
        , `price`
        , `change`
        , `high_low`
        FROM `efg.csv`))

【问题讨论】:

  • 顺便说一句,联合部分工作正常。
  • 你在连接什么?您使用反引号来识别对象名称意味着 MySQL,但我不知道 DateValue 是 MySQL 函数?也许尝试使用另一个标识符 (', ", [])。如果您不打算使用它们,在子查询中选择 4 列也是没有意义的,不要做比您必须做的更多的工作!
  • 事件我执行查询得到同样的错误。 “SELECT * FROM ((SELECT datetime, price, change, high_low FROM abc.csv) UNION (SELECT datetime, price, change, high_low FROM efg.csv))” 我为每个子查询添加别名。
  • 对于 DateValue(),因为我使用的是 ADODB。追随者查询工作正常。 "选择 MAX(DateValue(datetime)) AS date_from ,MIN(DateValue(datetime)) AS date_to FROM ( SELECT datetime , price , change , high_low FROM @99 @)"
  • 只有在我尝试从联合子查询中选择某些内容时才会出现错误。 "select * from ((select * from a) union (select * from b))"

标签: sql vba join adodb


【解决方案1】:

我认为您的“表”(子查询)可能需要别名

SELECT
 MAX(DateValue(`datetime`)) AS `date_from`
,MIN(DateValue(`datetime`)) AS `date_to`
FROM ((
        SELECT
         `datetime`
        , `price`
        , `change`
        , `high_low`
        FROM `abc.csv`) A
    UNION (
        SELECT
         `datetime`
        , `price`
        , `change`
        , `high_low`
        FROM `efg.csv`) B ) C

如果不是这样,有两个观察结果。一个是您正在使用反引号,可能是从文字编辑器中复制的。在使用单引号的地方,应该是常规的单引号字符。

第二次观察不确定您为什么在此处使用引号。字段名称看起来都有效并且不需要它们。尝试删除它们并保留字段名称。或者,如果您想要“引用”字段名称,我相信您的案例的语法将是双引号或括号。所以不是price,而是“价格”或[价格]。如果使用单引号,则表示字符串 p-r-i-c-e。

【讨论】:

    【解决方案2】:

    你应该命名你的子查询试试下面的代码

    SELECT
     MAX(DateValue(`datetime`)) AS `date_from`
    ,MIN(DateValue(`datetime`)) AS `date_to`
    FROM (
           SELECT `datetime` , `price` , `change`, `high_low`
            FROM `abc.csv`
           UNION 
           SELECT `datetime`, `price`, `change`, `high_low`
            FROM `efg.csv`
          ) t
    

    我在括号后添加了别名t

    【讨论】:

    • 谢谢,我试过添加别名,但不行,同样的错误:C
    • @johnn 你真的有表 abc.csv 和 efg.csv 吗?
    • 是的,以下联合部分工作正常 "((SELECT datetime, price, change, high_low FROM abc.csv) UNION (SELECT datetime, price , change, high_low FROM efg.csv))"
    • @johnn 我已经更改了答案,请立即尝试
    • 谢谢,我试过了,但还是失败了,同样的信息。似乎无法从联合表中进行查询。比如“select * from ((select * from a.csv) union (select * from b.csv))”而“(select * from a.csv) union (select * from b.csv)”就可以了。跨度>
    猜你喜欢
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    相关资源
    最近更新 更多