投诉数据库设计-SQL Query显示所有行

时间:2013-08-14 15:08:57

标签: sql database sql-server-2008 database-design

我有一个应用程序,我向我的登录代理显示所有投诉。 我有100个代理商可以看到相同的投诉屏幕。例如agentA和agentB 他们登录时可以看到所有投诉。

> Complaint_id  Complaint_detail
        1            complaint_1    
        2            complaint_2    
        3            complaint_3    

现在问题是我必须添加每个代理可以轻松发表评论的功能,或者你可以说一个提醒(例如,agentA发表评论:我将在明天处理此评论)。所以这个评论只会显示给agentA。

对于此实现,我创建了一个名为complaints_detail的新表,其中我添加了coloumn'comment'和'user_id'

并显示投诉我写查询

    select complaint.Complaint_name,complaint.User_ID from complaint 
left outer join complaint_detail on complaint.Complaint_id = complaint_detail.complaint_id

此查询显示所有记录,当我过滤用户时,它将仅显示用户记录以解决此问题我添加

    select * from (select complaint.Complaint_name,complaint.User_ID from complaint 
left outer join complaint_detail on complaint.Complaint_id = complaint_detail.complaint_id
complaint_detail.complaint_info_id
) asdf

其中user_id ='agentA' 或User_ID为空

select * from (
select complaints.complaint_id,complaints.complaint_detail,   complaints_detail.comment,complaints_detail.user_id from complaints
left outer join complaints_detail on complaints.Complaint_id = complaints_detail.complaint_id
) asdf
where user_id = 'agentA'
or User_ID is null

complaint_id    complaint_detail    comment        user_id
         1             complaint_1         complaint_1  agentA
         2             complaint_2         complaint_2  agentA
         3             complaint_3           null            null

代理商B

complaint_id    complaint_detail    comment        user_id
     1             complaint_1          complaint1_ agentB
     3             complaint_3           null            null

任何想法如何实现这一点,每个用户都可以看到所有投诉,只有他们的评论。我应该更改表结构或查询可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

这样的事情应该这样做:

select * from complaints cmp
left outer join comments com on cmp.id=com.complaint_id
and com.user_id='agentA' or com.user_id is null 

这将从与投诉相关的评论表中获取数据(如果存在)(左连接) 并将评论限制在代理的评论或评论

上没有用户ID

当然,如果您不想从投诉中检索所有列,则可以在选择中指定列。评论表。