SQL视图显示一次相同的ID

Posted

技术标签:

【中文标题】SQL视图显示一次相同的ID【英文标题】:SQL View Shows same id once 【发布时间】:2013-09-11 10:36:05 【问题描述】:

我有两个表用于存储有关人员的信息。一个保存用户名和地址信息,另一个保存多个电话号码,这些电话号码通过外键链接到用户 ID。现在我想创建一个视图,其中只有我显示在一行上的用户,并且在电话号码列中,应该列出链接到用户的所有电话号码。我已经尝试过完全加入,它会根据用户拥有多少电话号码多次给我同一个用户。

现在创建视图的代码如下所示

创建视图 StudentData AS SELECT COALESCE(Students.FirstName + ' ', ' ') + COALESCE(Students.LastName, ' ') AS '姓名', COALESCE(Students.City + ', ', '') + COALESCE(Students.Country + ', ', '') + COALESCE(Phone.PhoneType, '') + COALESCE(Phone.PhoneNumber + ', ', '') + COALESCE(Students.StreetAdress + ', ', '') + COALESCE(CAST(Students.ZipCode AS varchar(10)), '') AS 'Adress', COALESCE(CAST(Students.Birthdate AS varchar(11)) + ', ', ' ') + COALESCE(Students.StudentType, ' ') AS '信息' FROM Students FULL JOIN Phone ON Students.StudentID = Phone.StudentID

提前致谢

【问题讨论】:

有一些笨拙的方法可以做到这一点(通常取决于数据库系统的具体情况,因此请为您的 RDBMS 添加标签)。如果可能的话,最好在不同的层中执行此格式化,而不是尝试在数据库中执行此操作。 使用 STUFF 可以完成.. @UpvoteMarkAnswer - 我总是觉得人们关注 STUFF 是一种“神奇”的方式来做到这一点很有趣,而事实上,STUFF 调用负责的只是修剪领先逗号离开。 xml path 部分更负责连接。 感谢您的宝贵意见@Mr.Damien_The_Unbeliever.. 【参考方案1】:

这是一个字符串连接问题。查询在 SQL Server 中如下所示:

create view v_userphone
    select u.username, u.address,
           stuff((select ','+phonenumber
                  from userphone up
                  where up.userid = u.userid
                  for xml path ('')
                 ), 1, 1, ''
                ) as phonenumbers
    from users u;

【讨论】:

非常感谢!这让我很开心:-)

以上是关于SQL视图显示一次相同的ID的主要内容,如果未能解决你的问题,请参考以下文章

视图中的 SQL 查询

SQL:如何从递归查询创建视图?

显示视图 sql 时出错

T-SQL,在视图中重复相同的标量子查询性能

在两个视图上显示相同的弹出窗口

依次显示两个相同的警报视图。如何区分来自警报 1 和警报 2 的文本?