1
我的工作要求我從草圖SQL - 在這種情況下是否可以使用COUNT()?
建立一個論壇系統但是我面對關於SQL
我使用Derby數據庫問題的項目。
表結構如下。
TABLE ForumThread ( TID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, TTitle varchar(50) NOT NULL, UID Integer NOT NULL, CID Char(7) NOT NULL, Sticky Boolean Not null, Status char(1) ) ==========Content and reply of a thread======== TABLE ForumThreadContent ( RID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, Rcontent varchar(10000) Not Null, RTime Timestamp Not Null, REditTime Timestamp, UID Integer NOT NULL, TID Integer NOT NULL, Status Char(1) ) TABLE Users ( UID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, UName varchar(50) NOT NULL, UNick varchar(50) Not Null, ULoginName varchar(16) NOT NULL, Upwd varchar(16) NOT NULL, UPic varchar(200), UType Char(1) NOT NULL ) =========Foreign Key========== ALTER TABLE ForumThreadContent ADD CONSTRAINT Forum_reply_fk_thread Foreign KEY (TID) REFERENCES ForumThread(TID); Alter Table ForumThread Add Constraint forum_thread_fk_User Foreign Key (UID) References Users(UID);
在論壇中顯示單個線程的UI設計將顯示以下信息。由於能夠顯示10個線程的每一頁
- 主題標題(ForumThread.TTitle)
- 主題作者(Users.UNick)
- 在線程中的回覆數
- 新回覆時間(ForumThreadContent RTIME)
- 最新回答者的暱稱(Users.UNick)
我的SQL語句。
SELECT ftc.tid ,ft.TTitle, ss.uNick as "Author", s.Unick as "Last replied by" , MAX(ftc.RTIME) as "Last Reply Time", COUNT(*) AS "Posts Count"
FROm ForumThreadContent ftc, Users s, ForumThread ft, Users ss
WHERE ftc.UID = s.UID
AND ftc.TID = ft.TID
AND ft.UID = ss.UID
Group by ftc.tid , ft.ttitle , s.uNick , ss.uNick
Having MAX(ftc.RTIME) IN (SELECT MAX(ftcc1.RTime)
FROM ForumThreadContent ftcc1
WHERE ftc.TID = ftcc1.tid)
該聲明可以正確執行。 假設有3回覆在TID 「1」,當我運行它的COUNT(*)僅計數 「2」 TID:1. 要明確:在ForumThreadContent
- 3行具有外鍵「1」 TID的 的3
- 第一行的行具有外鍵的UID的「1」
- 其餘有一個外鍵UID的「2」
是否有可能做一個count()函數在這種情況下是否正確?我的SQL無法獲得高於2的數字。