我再次迷失在我的联盟中。
我的数量应该是4而不是16。 有人可以帮我吗?我自己找不到问题。
SELECT COUNT(TRK.REACTIE_ID) AS AANTAL_REACTIES,
AVG(W.WAARDERING) AS AANTAL_STERREN,
S.UITGEVER,
S.NAAM AS TVSHOW_NAAM,
S.BESCHRIJVING,
S.AFBEELDING_BESTANDSPAD,
S.ONDERTITEL,
S.WEBSITE,
C.NAAM AS CATEGORIE,
A.AFBEELDING_BESTANDSPAD,
A.VIDEO_BESTANDSPAD,
A.AFLEVERINGNR AS AFLEVERING,
A.SEIZOENNR AS SEIZOEN,
A.NAAM AS AFLEVERING_NAAM,
A.DUUR AS MINUTEN
FROM CATEGORIEEN_KOPPELTABEL CK
JOIN CATEGORIE C ON C.CATEGORIE_ID = CK.CATEGORIE_ID
JOIN TV_SHOW S ON S.TV_SHOW_ID = CK.TV_SHOW_ID AND S.NAAM = 'South Park'
LEFT JOIN TVSHOW_REACTIES_KOPPELTABEL TRK ON TRK.TV_SHOW_ID = S.TV_SHOW_ID
LEFT JOIN WAARDERING_TVSHOW W ON W.TV_SHOW_ID = S.TV_SHOW_ID
JOIN AFLEVERING A ON A.TV_SHOW_ID = S.TV_SHOW_ID
WHERE a.airdate = (SELECT MAX(TO_DATE(AIRDATE, 'DD:MM:YYYY'))
FROM AFLEVERING)
GROUP BY TRK.TV_SHOW_ID,
S.UITGEVER,
S.NAAM,
S.BESCHRIJVING,
S.AFBEELDING_BESTANDSPAD,
S.ONDERTITEL,S.WEBSITE,
C.NAAM,
A.AFBEELDING_BESTANDSPAD,
A.VIDEO_BESTANDSPAD,
A.AFLEVERINGNR,
A.SEIZOENNR,
A.NAAM,
A.DUUR,
W.TV_SHOW_ID;
RESULT OF THE QUERY 这是我目前的结果,但有4个反应记录。
答案 0 :(得分:0)
“我的数量应该是4而不是16。”
这表示缺少JOIN条件或WHERE过滤器。这种事情只能通过比较原始数据,即输入数据和输出,并查看哪些值过于频繁来诊断。如果您无法立即看到此消息,请删除聚合和group by子句,并可能添加一些主键列。
一个线索是聚合应用于具有外连接的表中的值:
LEFT JOIN TVSHOW_REACTIES_KOPPELTABEL TRK ON TRK.TV_SHOW_ID = S.TV_SHOW_ID
LEFT JOIN WAARDERING_TVSHOW W ON W.TV_SHOW_ID = S.TV_SHOW_ID
外连接可以吸入我们不期望的行,因此您应该检查您尝试实现的逻辑。
另一件事:不要在JOIN子句中混合过滤条件。 ANSI 92语法的重点是将它们分开。所以这应该在WHERE子句中:
AND S.NAAM = 'South Park'
它可能不会影响实际结果,但有时可能会影响实际结果。