0

2 つのサブクエリの結果を とマージする必要があるこの 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」による循環参照

4

2 に答える 2

1

実際、答えは、さらに「(」を追加しAS dateF、Gordon linoff が提案したようにエイリアスを配置しないことでした (循環参照が発生します)。

これが最終的な 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-08-01T13:23:10.723 に答える
0

少なくとも 1 つの問題は、 を定義していないことです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また、2 番目のサブクエリの句で、古いスタイルの結合と新しいスタイルの結合を混在させています。これらはすべて新しいスタイルの結合でなければなりません。

于 2013-08-01T12:13:04.587 に答える