提问人:Josh Bond 提问时间:12/9/2012 最后编辑:ScimonsterJosh Bond 更新时间:10/28/2014 访问量:134965
在另一个 where 语句中使用一个 sql 查询的结果(子查询?
Use results from one sql query in another where statement (subquery?)
问:
我看到很多类似的问题,但它们要么太复杂了,我无法理解,要么它们似乎没有问同样的事情。
很简单:我有两个列:用户 (dmid) 和下载 (dfid)。
选择下载了特定文件的所有用户:
SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024"
使用上面的用户,找到他们都下载的所有文件:
SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above}
对 dfid 结果进行计数和排序,以便我们可以看到每个文件收到了多少下载:
dfid dl_count_field ---- -------------- 18 103 3 77 903 66
我试图回答。
这似乎很接近,但 MySql 陷入困境,即使在 30 秒后也没有响应——我最终重新启动了 Apache。我现在不知道如何构建计数和顺序,而不会因为复杂的语句而出现语法错误——它甚至可能不是正确的语句。
SELECT dfid from downloads_downloads WHERE dmid IN (
SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024")
答:
65赞
Paul Creasey
12/9/2012
#1
SELECT dfid,count(*)
from downloads_downloads
WHERE dmid IN (
SELECT dmid
FROM downloads_downloads
where dfid = "7024"
)
group by dfid
或使用自加入
select t1.dfid,count(*)
from downloads_downloads t1
inner join downloads_downloads t2
on t1.dmid = t2.dmid
where t2.dfid = "7024"
如果这需要太长时间,那么您可能需要发布一个解释计划(谷歌它!
评论
4赞
noobie-php
1/29/2014
对我来说,解决方案 #1 有效,而且很容易理解,但你能解释一下吗,我的解决方案 #2 我可以站在自己加入
0赞
Rafael
10/6/2015
@paul-creasey 我知道这已经过时了,但你能解释一下第二个代码吗?
0赞
Mike B
4/7/2021
注意:如果你的最终目标是执行 ,第一种方法将导致错误,另一个答案帮助我解决了这个问题:stackoverflow.com/questions/45494/......update
0赞
TeflonMusk
8/26/2021
我在用例中使用了这两个解决方案,将第一个解决方案转储到第二个解决方案的 where 语句中。
评论
"