当前位置: 首页 > 知识库问答 >
问题:

SET子句错误#1054-“字段列表”中的列未知

羊舌迪
2023-03-14
LOAD XML LOCAL INFILE 'C:/modified.xml' 
INTO TABLE wp_posts ROWS IDENTIFIED BY '<Course>'
SET ID = ReferenceNo,
    post_title = CourseName,
    post_type = 'course';

这是我的xml文件的一个片段:

<?xml version="1.0" encoding="utf-8"?>
    <Course>
    <ReferenceNo>64055</ReferenceNo>
    <ProviderCode>CO</ProviderCode>
    <ProviderName>Training Centre</ProviderName>
    <CourseID>CO123</CourseID>
    <CourseName>IT Maintenance - Short Course</CourseName>
    <CourseTypeID>1</CourseTypeID>
    <CourseTypeName>1</CourseTypeName>
    <LocationCode>70203</LocationCode>
    <LocationName>Address of Training Centre</LocationName>
    <StartDate>2015.12.07</StartDate>
    <FinishDate>2016.03.04</FinishDate>
  </Course>

共有1个答案

微生博简
2023-03-14

load xml文档没有很好地解释列列表和set子句是如何应用的。它简单地说:

以下子句对加载XML的工作方式与对加载数据的工作方式基本相同:

>

  • 低优先级并发

    本地

    替换忽略

    字符集

    LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
    

    如果输入文件中字段的顺序与表中列的顺序不同,则还必须指定列列表。否则,MySQL无法告诉如何将输入字段与表列匹配。

    这如何转换为loadxml并不明显,因为(与分隔文件不同)字段在整个XML文档中不需要以一致的顺序出现。此外,即使字段的顺序一致,简单地指定要加载这些字段的列的各自名称也是不起作用的。

    文件接着说:

    LOAD XML LOCAL INFILE 'C:/modified.xml' 
    INTO TABLE wp_posts ROWS IDENTIFIED BY '<Course>'
    (@ReferenceNo, @z, @z, @z, @CourseName)
    SET ID = @ReferenceNo,
        post_title = @CourseName,
        post_type = 'course';
    
    CREATE TEMPORARY TABLE tmp_courses_xml (
      ReferenceNo    INT UNSIGNED,
      ProviderCode   CHAR(2),
      ProviderName   VARCHAR(255),
      CourseID       VARCHAR(15),
      CourseName     VARCHAR(255),
      CourseTypeID   INT UNSIGNED,
      CourseTypeName VARCHAR(255),
      LocationCode   INT UNSIGNED,
      LocationName   VARCHAR(255),
      StartDate      CHAR(10),
      FinishDate     CHAR(10)
    ) ENGINE=MEMORY;
    
    LOAD XML LOCAL INFILE 'C:/modified.xml'
      INTO TABLE tmp_courses_xml
      ROWS IDENTIFIED BY '<Course>';
    
    INSERT INTO wp_posts
      (ID, post_title, post_type)
    SELECT ReferenceNo, CourseName, 'course' FROM tmp_courses_xml;
    
    DROP TEMPORARY TABLE tmp_courses_xml;
    

  •  类似资料: