2

我在 MSSQL Server 2012 中有两张表,想将它们合并到一张新表中。它们由列 messageID 链接。第一个表(Message)有

messageID
sender
date

第二个表(收件人信息)有

messageID
recipient

主要问题是在Message中 messageID 是主键,因此是唯一的。在recipientInfo中,messageID 不是唯一的(因为一封邮件可以有多个收件人)。我想要一张新桌子

  • 每条消息一行,收件人在一列中串联
  • 每条消息多行,当有多个收件人时(每行一个收件人)
4

5 回答 5

4

也许是这样的(如果您使用的是 MSSQL 2005+):

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]
于 2012-04-24T09:12:19.073 回答
1

您想创建一个视图并将现有表保留在那里吗?或者您想永久合并这两个表?

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
于 2012-04-24T09:06:00.213 回答
0
select msg.messageID, msg.sender, rep.recipient, msg.date 
from Message msg 
left outer join recipientInfo rep on msg.messageID = rep.messageID
于 2012-04-24T09:06:35.780 回答
0

你可能需要在这里整理拼写

  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
于 2012-04-24T09:22:42.010 回答
-1

你可以合并这两个表

https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

这可能是更适合的事情,并且有更多的方法可以做到这一点

于 2012-04-24T09:12:13.707 回答