【问题标题】:Ms access 2010 two SQL queries in FROM clause with an INNER JOIN女士使用 INNER JOIN 在 FROM 子句中访问 2010 两个 SQL 查询
【发布时间】:2013-08-02 08:31:54
【问题描述】:

我有这个 SQL 请求,它应该将两个子查询的结果与INNER JOIN 合并,但我得到一个错误,我不知道为什么。你能帮帮我吗?

SELECT 
      dateT, PC.id_serie
FROM (
      SELECT id_serie, MIN(dateF) as dateF FROM fixings GROUP BY id_serie
) AS PC1
INNER JOIN
(
      SELECT target_calendar.dateT, series.id_serie FROM target_calendar, series  LEFT JOIN fixings ON (PC.DateT=fixings.dateF) AND (PC.id_serie = fixings.id_serie)
) AS PC
ON
      PC1.dateF = PC.dateT
AND 
      (((pc1.[dateF]) Is Null))
AND 
      DateT <= Date();

错误:别名“DateF”引起的循环引用

【问题讨论】:

    标签: sql ms-access join inner-join


    【解决方案1】:

    至少有一个问题是您没有定义PC1.DateF。您在 where 子句中也有 fixings.DateF,但在该范围内没有名为 fixings 的表别名。您需要在第一个子查询中使用列别名:

    SELECT 
          dateT, PC.id_serie
    FROM (
          SELECT id_serie, MIN(dateF) as dateF FROM fixings GROUP BY id_serie
    ) AS PC1
    INNER JOIN
    (
          SELECT target_calendar.dateT, series.id_serie FROM target_calendar, series  LEFT JOIN fixings ON (PC.DateT=fixings.dateF) AND (PC.id_serie = fixings.id_serie)
    ) AS PC
    ON
          PC1.dateF = PC.dateT
    AND 
          (((pc1.[dateF]) Is Null))
    AND 
          DateT <= Date();
    

    您还在第二个子查询的from 子句中混合了旧式连接和新式连接。这些都应该是新式连接。

    【讨论】:

    • 相同结果:JOIN 操作中的语法错误。然后他在第一个子查询中选择FROM fixings
    • @Yumino 。 . .我在重新阅读时得到了这个,所以问题被指出了。
    • 出现另一个错误:不支持连接表达式。然后他选择(((PC1.[dateF]) Is Null))。即使使用相同的JOIN 样式
    【解决方案2】:

    事实上,答案是添加更多 '(' 并且不要像 Gordon linoff 建议的那样放置别名 AS dateF(这会导致循环引用)。

    这是最终的 SQL 查询:

    SELECT 
              dateT, PC.id_serie
        FROM (
              SELECT id_serie, MIN(dateF) FROM fixings GROUP BY id_serie
        ) AS PC1
        INNER JOIN
        (
            (
              SELECT target_calendar.dateT, series.id_serie FROM target_calendar, series
             ) AS PC LEFT JOIN fixings ON (PC.DateT=fixings.dateF) AND (PC.id_serie = fixings.id_serie) 
       )
     ON
      (
             PC1.dateF = PC.dateT
      )
        WHERE 
             fixings.dateF Is Null
        AND 
              DateT <= Date();
    

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2011-06-12
      • 2017-05-03
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多