[英]SubQuery in INNER JOIN (MySQL)
我似乎在內連接中有一個子查詢有問題,但是我沒有。
有一個m:n表構造,有3個表,其中只有2個與問題相關。
當我像這樣創建一個完整的內部聯接:
SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN DVDPROFILER_dvd_actor ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC
我得到的正是我所期待的:頂級演員按照他在任何電影中記入的時間計算,即使多次擔任多個角色也是如此。
我的目標是提取有關演員被分析的電影的數量的信息,我認為 - 我很天真 - 它應該像這樣簡單:
SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN
(SELECT caid
FROM DVDPROFILER_dvd_actor
GROUP BY id) AS DVDPROFILER_dvd_actor
ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC
但結果完全不正確
所以我用一個選定的actor檢查了子查詢
SELECT caid, id
FROM DVDPROFILER_dvd_actor
WHERE caid = 30801
GROUP BY id
並得到我所期望的
所以我玩了一下,當我在子查詢中引入LIMIT子句時,我突然得到了不同但從未正確的回復。
SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN
(SELECT caid
FROM DVDPROFILER_dvd_actor
GROUP BY id
LIMIT 0 , 50000) AS DVDPROFILER_dvd_actor
ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC
對於不同的LIMIT,我得到了不同的結果,但在某些時候,當我超過一定限度時,結果完全沒有限制 - 但同樣錯誤。
我在這里俯瞰什么? :-(
你能試試嗎? 我想COUNT(DISTINCT DVDPROFILER_dvd_actor.id)
對你有幫助。
SELECT lastname, firstname, COUNT(DISTINCT DVDPROFILER_dvd_actor.id) AS Count
FROM DVDPROFILER_dvd_common_actor
INNER JOIN DVDPROFILER_dvd_actor ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY lastname, firstname
ORDER BY Count DESC
如果沒有,我們非常高興您在http://www.sqlfiddle.com/上發布數據和架構。 這使我們更容易測試
謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.