【问题标题】:Producing XML from a multi-table join in SQL Server从 SQL Server 中的多表连接生成 XML
【发布时间】:2009-07-31 15:57:40
【问题描述】:

给定一个包含一个父表和两个或多个子表的数据库架构。例如:

是否可以使用for xml 语句创建查询,输出以下 XML:

<?xml version="1.0"?>
<person>
    <name>Joe Bloggs</name>
    <age>25</age>
    <address>
        <streetAddress>123 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A12 3BC</postcode>
    </address>
    <address>
        <streetAddress>124 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A12 3BC</postcode>
    </address>
    <contact>
        <type>Home Phone</type>
        <value>01234 567890</value>
    </contact>
    <contact>
        <type>Work Phone</type>
        <value>01987 654321</value>
    </contact>
    <contact>
        <type>Email Address</type>
        <value>joe@example.com</value>
    </contact>
</person>

我最初的尝试:

select person.name, person.age,
        address.streetAddress, address.town, address.postcode,
        contact.type, contact.value
    from Person as person
        left join Address as address on person.PersonID = address.PersonID
        left join Contact as contact on person.PersonID = contact.PersonID
    where person.PersonID = 1
    for xml auto, elements

产生了输出所有联系人和地址组合的结果:

<?xml version="1.0" encoding="utf-8"?>
<person>
    <name>Joe Bloggs</name>
    <age>25</age>
    <address>
        <streetAddress>123 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A12 3BC</postcode>
        <contact>
            <type>Home Phone</type>
            <value>01234 567890</value>
        </contact>
        <contact>
            <type>Work Phone</type>
            <value>01987 654321</value>
        </contact>
        <contact>
            <type>Email Address</type>
            <value>joe@example.com</value>
        </contact>
    </address>
    <address>
        <streetAddress>124 Test Street</streetAddress>
        <town>Example Town</town>
        <postcode>A32 1BC</postcode>
        <contact>
            <type>Home Phone</type>
            <value>01234 567890</value>
        </contact>
        <contact>
            <type>Work Phone</type>
            <value>01987 654321</value>
        </contact>
        <contact>
            <type>Email Address</type>
            <value>joe@example.com</value>
        </contact>
    </address>
</person>

对联系人或地址表使用单个左连接会产生我所追求的部分内容,但在添加第二个连接后它开始出错。是否有其他技术可用于实现我正在寻找的结果?

【问题讨论】:

    标签: sql-server xml join


    【解决方案1】:
    SELECT  person.name, person.age,
            (
            SELECT  address.streetAddress, address.town, address.postcode
            FROM    Address as address
            WHERE   person.PersonID = address.PersonID
            FOR XML PATH('ADDRESS'), TYPE
            ),
            (
            SELECT  contact.type, contact.value
            FROM    Contact as contact
            WHERE   person.PersonID = contact.PersonID
            FOR XML PATH('CONTACT'), TYPE
            ),
    FROM    Person as person
    WHERE   person.PersonID = 1
    FOR XML AUTO, ELEMENTS
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多