0
CREATE TABLE [dbo].[db_Chat](
[ChatID] [int] IDENTITY(1,1) NOT NULL,
[MemberID] [int] NOT NULL,
[MsgText] [nvarchar](300) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL,
[DateCreated] [smalldatetime] NOT NULL,
CONSTRAINT [PK_db_Chat] PRIMARY KEY CLUSTERED
(
[ChatID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
子表:
CREATE TABLE [dbo].[db_Chat_Read](
[ChatReadID] [int] IDENTITY(1,1) NOT NULL,
[MemberID] [int] NOT NULL,
[ChatID] [int] NOT NULL,
[DateCreated] [smalldatetime] NOT NULL,
CONSTRAINT [PK_db_Chat_Read] PRIMARY KEY CLUSTERED
(
[ChatReadID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
我要加入兩個表並顯示孩子的行數表,如果沒有選擇行,那麼它可以顯示零。
我知道下面的代碼工作正常。
select c.ChatID, COUNT(*) as ACount from db_chat c
left join db_Chat_Read r
on c.ChatID = r.ChatID
where c.ChatGroupID=2
GROUP BY c.ChatID
但我需要這樣的事情在一個單一的SQL代碼,下面的SQL代碼是無效的,但它顯示什麼結果,我想:我需要與子表的唯一行計數主表的全領域。
select c.*, COUNT(r.*) from db_chat c
left join db_Chat_Read r
on c.ChatID = r.ChatID
where c.ChatGroupID=2
謝謝〜!
我更喜歡第一個,但無論哪種都ok –
如果數據量是巨大的,哪一個更有效?如果我沒有錯,第一個更有效率? –
@HamiltonWang。 。 。假設where子句具有高選擇性(意味着許多行被過濾掉),並且所有或幾乎所有的「聊天」都具有「聊天讀取」記錄,第一種可能更有效。使用'db_Chat_Read(ChadId)'的索引會更有效率。 –