sql - 将两个表合二为一

标签 sql sql-server-2012

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

messageID
sender
date

第二个表(recipientInfo)有

messageID
recipient

主要问题是在 Message 中,messageID 是主键,因此是唯一的。在recipientInfo 中,messageID 不是唯一的(因为一条消息可以有多个收件人)。我想要一张新 table ,上面有其中之一

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

最佳答案

也许是这样的(如果您使用的是 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]

关于sql - 将两个表合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294846/

相关文章:

java - 如何使用 Java 中的 SQL 修复已创建的表和值未显示在控制台中的问题?

sql - SQL 中逗号分隔的列表

sql - PostgresQL 查询计算一天内的时间间隔

sql-server - 获取远程 SQL Server 日期/时间

powershell - 如何使用 Invoke-Sqlcmd 连接到 SQL Server LocalDB?

sql - Firebird 2.1 TIMESTAMP 算术和民用间隔

sql - JOIN 打破 WHERE 子查询

sql - T-SQL 平均计算

asp.net - 无法打开数据库,因为它的版本是 706。 (ASP.net)