2

次の入力 XML があります。

 <?xml version="1.0"?>
<Employees>
    <Employee emplid="1111">
        <lastname>Watson</lastname>
        <age>30</age>
        <email>johnwatson@sh.com</email>
    </Employee>
    <Employee emplid="2222">
        <firstname>Sherlock</firstname>
        <lastname>Holmes</lastname>
        <age>32</age>
        <email>sherlock@sh.com</email>
    </Employee>
</Employees>

従業員のファーストネームが欠落していることに注意してください 1111

次の選択を実行しています:

 select 
     c1.emplid,
     fname,
     lname
     from(
     select emplid, xmldata from employeeXML 
     LATERAL VIEW explode (xpath(xmldata,'/Employees/Employee/@emplid')) dummyTable as emplid )c1

     LATERAL VIEW explode (xpath(xmldata,concat('/Employees/Employee[@id="',c1.emplid,'"',']/firstname/text()')))dummyTable2 as fname
     LATERAL VIEW explode (xpath(xmldata,concat('/Employees/Employee[@id="',c1.emplid,'"',']/lastname/text()'))) dummyTable3 
     as lname;

期待される結果:

 1111 NULL     Watson
 2222 Sherlock Holmes

欠落している名前の NULL 値に注意してください)

ただし、次の結果が得られます。

2222 シャーロック・ホームズ

従業員 1111 の名が見つからないため、クエリで最初の従業員が返されません。期待される結果に示されているように、両方の従業員データを取得する方法はありますか? 助けてください。ありがとう、

4

1 に答える 1