Mam to żądanie SQL, które powinno połączyć wyniki dwóch podkwerend z INNER JOIN
, ale pojawia się błąd i nie wiem dlaczego. Czy możesz mi pomóc, proszę?
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();
Błąd: odwołanie cykliczne spowodowane przez alias „DateF”
Odpowiedzi:
1 dla odpowiedzi № 1W rzeczywistości odpowiedzią było dodanie więcej „(” i nie wstawianie aliasu AS dateF
jak sugerował Gordon Linoff (powoduje to cykliczne odniesienie).
Oto ostatnie zapytanie 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();
0 dla odpowiedzi nr 2
Co najmniej jednym problemem jest to, że nie definiujesz PC1.DateF
. Ty też masz fixings.DateF
w where
klauzula, ale nie wywołano aliasu tabeli fixings
w tym zakresie. Potrzebujesz aliasu kolumny w pierwszym podzapytaniu:
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();
Mieszasz także sprzężenia w starym stylu i sprzężenia w nowym stylu w from
klauzula w drugim podzapytaniu. Powinny to być sprzężenia w nowym stylu.