簡體   English   中英

INNER JOIN中的子查詢(MySQL)

[英]SubQuery in INNER JOIN (MySQL)

我似乎在內連接中有一個子查詢有問題,但是我沒有。

  • 服務器:通過UNIX套接字的Localhost
  • 軟件:MySQL
  • 軟件版本:5.5.32-nmm2-log - (Ubuntu)
  • 數據庫客戶端版本:libmysql - 5.5.32

有一個m:n表構造,有3個表,其中只有2個與問題相關。

  • 第一個是包含actor的表,標識符:caid。
  • 第二個是跨表連接演員到電影(演員ID:caid,電影ID:id)

當我像這樣創建一個完整的內部聯接:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM