Sql 把两张桌子合在一起
我在MSSQL Server 2012中有两个表,希望将它们合并到一个新表中。它们由messageID列链接。第一个表(消息)已被删除 第二个表(recipientInfo)具有 主要问题是消息中的messageID是主键,因此是唯一的。在recipientInfo中,messageID不是唯一的(因为一封邮件可以有多个收件人)。我想要一张有两张桌子的新桌子Sql 把两张桌子合在一起,sql,sql-server-2012,Sql,Sql Server 2012,我在MSSQL Server 2012中有两个表,希望将它们合并到一个新表中。它们由messageID列链接。第一个表(消息)已被删除 第二个表(recipientInfo)具有 主要问题是消息中的messageID是主键,因此是唯一的。在recipientInfo中,messageID不是唯一的(因为一封邮件可以有多个收件人)。我想要一张有两张桌子的新桌子 每封邮件一行,收件人连接在一列中 当有多个收件人(每行一个收件人)时,每条邮件有多行 是否要创建视图并将现有表保留在那里?还是要永久合并
- 每封邮件一行,收件人连接在一列中
- 当有多个收件人(每行一个收件人)时,每条邮件有多行
SELECT m.messageID, m.sender, m.date, r.recipient
INTO New_Table
FROM Message m LEFT OUTER JOIN
recipientinfo r on m.messageID = r.messageID
是否要创建视图并将现有表保留在那里?还是要永久合并这两个表
SELECT m.messageID, m.sender, m.date, r.recipient
INTO New_Table
FROM Message m LEFT OUTER JOIN
recipientinfo r on m.messageID = r.messageID
您可以合并这两个表
这可能更合适,而且有多种方法可以做到这一点您可以合并这两个表 这可能是更合适的方法,有多种方法可以做到这一点可能是这样的(如果您使用的是MSSQL 2005+): 可能是这样(如果您使用的是MSSQL 2005+):
你可能需要在这里对拼写进行分类
select sender,date,( select recipient+chr(10) from receipientInfo as r where r.messageid = m.messageid order by r.recipient FOR XML PATH ('')) as receipents from message as m
你可能需要在这里对拼写进行分类
select sender,date,( select recipient+chr(10) from receipientInfo as r where r.messageid = m.messageid order by r.recipient FOR XML PATH ('')) as receipents from message as m
是否要创建视图并将现有表保留在那里?还是想永久性地合并这两张桌子?@Ste我想要一张新桌子,所以永久性地合并combination@casperOne这在什么方面不是一个真正的问题?我也得到了一个非常好的答案,我接受了。你有什么问题?@Freek8问题是你的;有关堆栈溢出的问题预计会显示出您尚未完成的研究工作。我强烈建议阅读,以便更好地理解为什么这个问题不符合网站的质量标准。@casperOne我看不出问题所在。是否要创建一个视图并保留现有表?还是想永久性地合并这两张桌子?@Ste我想要一张新桌子,所以永久性地合并combination@casperOne这在什么方面不是一个真正的问题?我也得到了一个非常好的答案,我接受了。你有什么问题?@Freek8问题是你的;有关堆栈溢出的问题预计会显示出您尚未完成的研究工作。我强烈建议阅读,以便更好地理解为什么这个问题不符合网站的质量标准。@casperOne我看不出这个问题是的,但你只给了我30秒的时间来删除评论并修改我的答案。谢谢你,这个问题也行得通。因为Arion的解决方案占用的空间较少,所以我将使用该解决方案是的,但您只给了我30秒的时间来删除评论并修改我的答案。谢谢,这一个也有效。由于Arion的解决方案占用的空间较少,所以我将使用1+1 For Xml路径作为透视和连接的最佳解决方案values@Arion谢谢,这很有效。而且真的很快@德瓦克:谢谢,是的。@Freek8:没问题。乐意help@Freek8:它将值浓缩为xml。然后这些东西就变成了瓦查尔。若您感兴趣,那个么读取+1 For Xml路径是透视和连接的最佳解决方案values@Arion谢谢,这很有效。而且真的很快@德瓦克:谢谢,是的。@Freek8:没问题。乐意help@Freek8:它将值浓缩为xml。然后这些东西就变成了瓦查尔。如果你感兴趣,请阅读
CREATE TABLE NewTable
(
messageID INT,
sender VARCHAR(100),
recipient VARCHAR(MAX),
date DATETIME
)
INSERT INTO NewTable(messageID,sender,recipient,date)
SELECT
[Message].messageID,
[Message].sender,
STUFF
(
(
SELECT
',' +recipient
FROM
recipientInfo
WHERE
recipientInfo.messageID=[Message].messageID
FOR XML PATH('')
)
,1,1,'') AS recipient,
[Message].date
FROM
[Message]
select sender,date,( select recipient+chr(10) from receipientInfo as r where r.messageid = m.messageid order by r.recipient FOR XML PATH ('')) as receipents from message as m