Mysql SET子句错误1054-字段列表中的列未知

Mysql SET子句错误1054-字段列表中的列未知,mysql,xml,Mysql,Xml,有人能帮我吗。我正在将一个XML文件加载到MySQL中,列名称不相同,因此我尝试使用SET子句,但我一直收到一个错误,在字段列表中表示未知列名ReferenceNo 这是MSQL查询 LOAD XML LOCAL INFILE 'C:/modified.xml' INTO TABLE wp_posts ROWS IDENTIFIED BY '<Course>' SET ID = ReferenceNo, post_title = CourseName, post_t

有人能帮我吗。我正在将一个XML文件加载到MySQL中,列名称不相同,因此我尝试使用SET子句,但我一直收到一个错误,在字段列表中表示未知列名ReferenceNo

这是MSQL查询

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>

您需要手动将XML映射到表,这假设每一行的顺序相同

不能使用SET子句并通过xml属性名称引用行。这很好,但似乎是当前实现的一个限制

所以你想要这样的东西。在本例中,我将示例缩短为前4列,您可以扩展其余的列。我还将第5个XML列选择到变量@var1中,以便稍后使用,我不确定您是否需要它,但这是一个示例,说明如何将XML中的数据获取到变量中,以便稍后在集合中使用-尽管这在需要以某种方式修改数据时非常有用,如果您只是重新映射名称,那么您仍然可以使用此语法进行映射。我还设置了静态post_类型列

LOAD XML LOCAL INFILE 'C:/modified.xml' 
INTO TABLE wp_posts ROWS IDENTIFIED BY '<Course>'
(ID, ProviderCode, ProviderName, CourseID, @var1)
SET
  test_column=CONCAT('test', @var1),
  post_type='course';
文档没有很好地解释如何应用列列表和SET子句。它只是说:

以下条款的工作方式与它们的工作方式基本相同:

低优先级或并发

本地的

替换或忽略

字符集

列或用户变量

设置

有关这些条款的更多信息,请参见

各国的文件:

默认情况下,当语句末尾没有提供列列表时,输入行应包含每个表列的字段。如果只想加载表的某些列,请指定列列表:

将数据填充“persondata.txt”加载到表persondata col1、col2、,。。。; 如果输入文件中字段的顺序与表中列的顺序不同,则还必须指定列列表。否则,MySQL无法判断如何将输入字段与表列匹配

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

文件接着说:

列列表可以包含列名或用户变量。对于用户变量,SET子句允许您在将结果分配给列之前对其值执行转换

这种方法确实适用于加载XML,因此只要元素在整个文档中以一致的顺序出现,就可以执行以下操作:

加载XML本地填充'C:/modified.XML' wp_将由标识的行发布到表中 @参考号,@z,@z,@z,@CourseName SET ID=@ReferenceNo, post_title=@CourseName, post_类型=‘课程’; 但是,我认为通过更直接映射到XML模式的临时表可能更稳定、更合理:

创建临时表tmp_courses_xml ReferenceNo INT UNSIGNED, 提供程序代码CHAR2, ProviderName VARCHAR255, 卡尔塞德·瓦尔恰尔15, CourseName VARCHAR255, CourseTypeID INT未签名, CourseTypeName VARCHAR255, 位置代码INT无符号, 位置名称VARCHAR255, 起始日期CHAR10, 完成日期CHAR10 引擎=内存; 加载XML本地填充'C:/modified.XML' 进入表tmp\u courses\u xml 由标识的行; 插入wp_柱中 ID、帖子标题、帖子类型 从tmp_courses_xml中选择ReferenceNo、CourseName、course; 删除临时表tmp_courses_xml;
元素在每个表中的显示顺序是否保证总是相同的?嗨,eggyal,谢谢你的帮助,临时表就是这样,我想,因为我需要将同一个表中的数据插入多个表中,所以它为我勾选了所有框。非常感谢你的帮助。谢谢:嗨,特伦特,谢谢你的回复,谢谢你抽出时间来帮忙。这是一个很大的帮助,因为我确实需要在后期处理一些数据。