小编Ale*_*xis的帖子

选择与左连接中的子查询

通常我必须在获取其他非相关行的查询中返回某些行的计数。

例如一个表用户一个表评论和一个表图片

User:
id
nickname

Review:
id
to_user_id
from_user_id
rating

Picture:
id:
user_id
url
Run Code Online (Sandbox Code Playgroud)

假设我想在一个查询中检索“给定”userId 的所有图片 url 的昵称以及评论该用户的人数。

我认为在执行此查询时的第一种也是简单的方法是:

SELECT
  u.nickname
  (SELECT count(*) FROM review WHERE to_user_id = u.id) as reviewCount,
  p.url
FROM user
LEFT JOIN picture ON p.user_id = u.id
WHERE 
  u.id = 1
Run Code Online (Sandbox Code Playgroud)

这样做的另一种方法是没有那个子选择并通过在正确的 user_id 上加入评论表

SELECT 
 u.nickname,
 r.reviewCount,
 p.url
FROM user u 
LEFT JOIN (
    SELECT to_user_id, count(*) reviewCount FROM review GROUP BY to_user_id
 ) r ON r.to_user_id = u.id
LEFT JOIN picture ON p.user_id …
Run Code Online (Sandbox Code Playgroud)

mysql performance optimization mysql-5.7 query-performance

4
推荐指数
1
解决办法
9877
查看次数

一对一的关系是一个好习惯吗?

我有一个表“地点”(id_place,名称,地址,coor_x,coor_y)

我想在一个地方添加他们的“facebook 页面”“twitter 页面”“wesbite”和电话

我的第一个想法是创建一个表,假设 social_contact 包含这些字段,并在地点表 (social_contact_id) 中添加一个额外的列,该列将是 1 到 0..1 的关系(这 4 个字段是可选的,可以为空)

这是好的做法吗?还是我最好将这 4 个新文件直接放入地点表中?

谢谢你!

database-design

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