mysql - 如何以更短更好的方式在 MySQL 中编写此代码?
问题描述
数据库中有3个表,它们没有关系。如何以简短的形式编写此代码?对不起我的英语不好了。
MySQL 代码;
SELECT
*,
(SELECT COUNT(c2.id) FROM comments AS c2 WHERE c2.phone_number = comments.phone_number AND c2.country_code = comments.country_code AND c2.approve = "0" AND c2.deleted_at IS NULL) AS comment_count,
(SELECT COUNT(f.id) FROM flag_numbers AS f WHERE f.phone_number = comments.phone_number AND f.country_code = comments.country_code AND comments.approve = "0" AND comments.deleted_at IS NULL) AS flag_count
FROM comments
WHERE approve = "0" AND deleted_at IS NULL
ORDER BY id DESC
解决方案
您的代码非常好,但以下内容更简单一些:
SELECT c.*,
COUNT(*) OVER (PARTITION BY c.phone_Number, c.country_code) as comment_count,
(SELECT COUNT(f.id)
FROM flag_numbers f
WHERE f.phone_number = c.phone_number AND
f.country_code = c.country_code
) AS flag_count
FROM comments c
WHERE c.approve = '0' AND c.deleted_at IS NULL
ORDER BY id DESC;
如果approve
是数字,则删除单引号。不要引用数字常量。
区别:
- 将第一个子查询替换为
comment_count
. - 删除
flag_count
.
推荐阅读
- javascript - 如何实现 2048 的合并功能
- discord.js - 通过 id discord.js 缓存公会用户
- php - PHP/FPDI:“警告:fopen:打开流失败:没有这样的文件或目录。” 和“atal 错误:未捕获的 InvalidArgumentException:未提供流。”
- python - 将值附加到 numpy 数组时出现问题
- rust - 有没有办法绕过原子操作的成本?
- node.js - 使用node.js在sqlite3中一次插入多个依赖表
- python - 通过将每一列重复一定次数来创建数据框
- python - 比较两个数组时出错:DeprecationWarning: elementwise comparison failed; 这将在未来引发错误
- python - 如何在 Cloud Function (Python) 中初始化 Firebase Admin SDK
- r - R:尝试在 filter.data.frame 中使用零长度变量名