繁体   English   中英

将一列连接到两个表

[英]Join one column to two tables

我有一个数据库,其中包含有关帐户,职位和用户喜欢的职位的信息。

AccountData
id || username

PostData
id || text || accountid

LikesDislikesData
liked(bool) || accountid || postid

我建立了一个视图,因为我需要数据库中的特定数据来绑定我的应用程序内部。 这是我正在使用的代码:

  SELECT trippin.PostData.id, trippin.AccountData.username, trippin.PostData.posttext,     
    trippin.CategoryData.categoryname, trippin.PostData.__createdat as CreatedAt,
    SUM(CASE WHEN likes.liked = 1 THEN 1 ELSE 0 END) as Likes, 
    SUM(CASE WHEN likes.liked = 0 THEN 1 ELSE 0 END) as DisLikes
FROM trippin.PostData    
INNER JOIN trippin.AccountData ON trippin.PostData.accountid = trippin.AccountData.id
INNER JOIN trippin.CategoryData ON trippin.CategoryData.id = trippin.PostData.categoryid
LEFT OUTER JOIN trippin.LikesDislikesData likes ON likes.postid = trippin.PostData.id
GROUP BY (trippin.AccountData.username), (trippin.PostData.posttext), (trippin.PostData.id), (trippin.categorydata.categoryname), (trippin.PostData.__createdat)

问题是,每当我向其中添加联接(likes.accountid = trippin.AccountData.id)时,行要么重复,要么输出不正确。

我认为这可能是一个设计问题,但是我不确定,也找不到能解决我的确切问题的任何东西。

因此,基本上,每个帖子都是由用户撰写的。 然后,每个用户都被其他用户喜欢或不喜欢(或不喜欢)。 我需要在视图内部保存所有这些数据,以便将其传递给我的应用程序。

select postID
  , sum(case when liked = true then 1 else 0 end) as liked
  , sum(case when liked = true then 1 else 0 end) as disliked
from trippin.LikesDislikesData
group by postID

上面的声明应按帖子ID给您提供喜欢和不喜欢的信息。 将其称为子查询并加入您的主查询:

SELECT trippin.PostData.id, trippin.AccountData.username, trippin.PostData.posttext,     
trippin.CategoryData.categoryname, trippin.PostData.__createdat as CreatedAt,
Likes, 
DisLikes
FROM trippin.PostData    
INNER JOIN trippin.AccountData ON trippin.PostData.accountid = trippin.AccountData.id
INNER JOIN trippin.CategoryData ON trippin.CategoryData.id = trippin.PostData.categoryid
LEFT OUTER JOIN   (
  select postID
  , sum(case when liked = true then 1 else 0 end) as liked
  , sum(case when liked = true then 1 else 0 end) as disliked
from trippin.LikesDislikesData
group by postID)
likes ON likes.postid = trippin.PostData.id

应该为您所追求的工作。 我删除了您的group by子句,因为您不再需要sums语法。 通常,您会发现创建一个子查询以按ID进行计数和求和,然后通过该ID将其连接到主查询将是获取计数的最简单解决方案...至少无需将整个select语句分组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM