繁体   English   中英

女士在2010年的FROM子句中使用INNER JOIN访问两个SQL查询

[英]Ms access 2010 two SQL queries in FROM clause with an INNER JOIN

我有此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”引起的循环引用

实际上,答案是添加更多的'(',并且不要像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();

至少一个问题是您没有定义PC1.DateF 你也有fixings.DateF的在where条款,但没有表别名叫做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子句中混合使用旧式联接和新式联接。 这些都应该是新型联接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM