Mysql SET子句错误1054-字段列表中的列未知
有人能帮我吗。我正在将一个XML文件加载到MySQL中,列名称不相同,因此我尝试使用SET子句,但我一直收到一个错误,在字段列表中表示未知列名ReferenceNo 这是MSQL查询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
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,谢谢你的帮助,临时表就是这样,我想,因为我需要将同一个表中的数据插入多个表中,所以它为我勾选了所有框。非常感谢你的帮助。谢谢:嗨,特伦特,谢谢你的回复,谢谢你抽出时间来帮忙。这是一个很大的帮助,因为我确实需要在后期处理一些数据。