簡體   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