[英]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.