为什么这个查询
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)
那么它可以正常工作 - 子查询有问题吗?
我有两张桌子 -comments
和votes
:
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
说它复制到临时表。这看起来很慢,是否需要使用临时表?