通常我必须在获取其他非相关行的查询中返回某些行的计数。
例如一个表用户一个表评论和一个表图片
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) 我有一个表“地点”(id_place,名称,地址,coor_x,coor_y)
我想在一个地方添加他们的“facebook 页面”“twitter 页面”“wesbite”和电话
我的第一个想法是创建一个表,假设 social_contact 包含这些字段,并在地点表 (social_contact_id) 中添加一个额外的列,该列将是 1 到 0..1 的关系(这 4 个字段是可选的,可以为空)
这是好的做法吗?还是我最好将这 4 个新文件直接放入地点表中?
谢谢你!