相关疑难解决方法(0)

MySQL子查询的问题

为什么这个查询

DELETE FROM test 
WHERE id = ( SELECT id 
             FROM (SELECT * FROM test) temp 
             ORDER BY RAND() 
             LIMIT 1
           );
Run Code Online (Sandbox Code Playgroud)

有时删除 1 行,有时删除 2 行,有时什么都不删除?

如果我用这种形式写:

SET @var = ( SELECT id 
             FROM (SELECT * FROM test) temp 
             ORDER BY RAND() 
             LIMIT 1
           ); 
DELETE FROM test 
WHERE id=@var;
Run Code Online (Sandbox Code Playgroud)

那么它可以正常工作 - 子查询有问题吗?

mysql

16
推荐指数
2
解决办法
6805
查看次数

防止复制到临时表 (sql)

我有两张桌子 -commentsvotes

comments(id, text, user_id, page_id)  
votes(id, value)
Run Code Online (Sandbox Code Playgroud)

表中有 2,000,000 行votes

我创建了以下查询:

SELECT SUM(votes.value),
       comments.text,
       comments.comment_id 
FROM comments, votes 
WHERE comments.comment_id = votes.comment_id AND comments.page_id = $page_id 
GROUP BY comment_id;
Run Code Online (Sandbox Code Playgroud)

查询运行了大约 12 秒,这正常吗?

SHOW PROCESSLIST说它复制到临时表。这看起来很慢,是否需要使用临时表?

mysql temporary-tables

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

mysql ×2

temporary-tables ×1