在另一个where语句(子查询?)中使用一个sql查询的结果

Jos*_*ond 36 mysql sql subquery

我看到很多类似的问题,但它们要么是如此复杂,我无法理解它们,或者它们似乎并没有问同样的问题.

这很简单:我有两列:用户(dmid)和下载(dfid).

  1. 选择下载特定文件的所有用户:

    SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用上面的用户,找到他们都下载的所有文件:

    SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 计算并订购dfid结果,这样我们就可以看到每个文件收到的下载次数:

    dfid    dl_count_field
    ----    --------------
    18       103
    3        77
    903      66
    
    Run Code Online (Sandbox Code Playgroud)

我试图回答.

这似乎很接近,但MySql陷入困境,即使在30秒后也没有响应 - 我最终重启了Apache.而且我现在不知道如何在没有语法错误的情况下构造计数和顺序,因为复杂的语句 - 它甚至可能不是正确的语句.

SELECT dfid from downloads_downloads WHERE dmid IN (
    SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024")
Run Code Online (Sandbox Code Playgroud)

Pau*_*sey 46

SELECT dfid,count(*) 
from downloads_downloads 
WHERE dmid IN (
    SELECT dmid 
    FROM downloads_downloads 
    where dfid = "7024"
)
group by dfid
Run Code Online (Sandbox Code Playgroud)

或使用自我加入

select t1.dfid,count(*)
from downloads_downloads t1
inner join downloads_downloads t2
on t1.dmid = t2.dmid
where t2.dfid = "7024"
Run Code Online (Sandbox Code Playgroud)

如果这需要太长时间,那么你可能需要发布一个解释计划(google it!)

  • 对我来说解决方案#1有效,而且很容易理解,但是请你解释一下,我的解决方案#2我可以站在自我加入 (4认同)