我有一个包含主键和四个外键的表。我正在使用的所有数据都在Excel电子表格中。我不确定将这些数据加载到我的数据库中的最佳方法。
对于其他一些表,我将我需要的Excel列导出为.csv文件,然后使用正则表达式将数据格式化为INSERT
语句。
我使用的主表看起来像这样:
Table 1
----------------------------------------------------
| ID | Text | category_ID | f2 |f3 |
----------------------------------------------------
| 1 | Foo | NULL | NULL |NULL |
| 2 | Bar | NULL | NULL |NULL |
----------------------------------------------------
下一张表是这样的:
Table 2
-----------------------
| ID | Category |
-----------------------
| 1 | CatFoo |
| 2 | CatBar |
-----------------------
我的Excel就像这样:
Excel
---------------------------------
| ID | Text | category |
---------------------------------
| 1 | Foo | CatFoo |
| 2 | Bar | CatFoo |
| 3 | What | CatBar |
---------------------------------
我的目标是表1中的字段Category_ID
从表2中获取给定类别的ID号。为此,我需要从Excel中读取该类别并将其放入正确的{{1 }}。当我只有Excel表格中的文本数据时,我很困惑如何做到这一点。
有没有办法根据Category_ID
中的数据检查文本,找到与文字匹配的ID,并相应更新Table 2
中的行?
我一直在网上搜索,但我找不到任何可以使用的东西,但是我非常喜欢数据库,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
您应该做的第一件事是将所有数据加载到同一个数据库中。
我假设您的CSV格式已正确形成,您可以使用mySQL的LOAD DATA INFILE函数将csv文件加载到SQL数据库中,如果您不使用mysql,您可能会为您的数据库系统找到类似的函数。
你需要首先创建限制数据的表结构,然后你应该用查询加载数据(不用担心,如果你不知道mysql引擎的默认路径,mySQL会在错误中给你消息)
LOAD DATA INFILE'path / YourCSVFILE.csv'INTO TABLE table OF FERMDS TEDINATED BY''LINEINATED BY'\ n';
请参阅下面的完整文档(根据您自己的csv格式进行调整) http://dev.mysql.com/doc/refman/5.1/en/load-data.html
所以经过大量尝试复杂的UPDATE JOIN查询没有成功,我找到了一个解决方案,通过你的问题。
创建一个包含所有数据而没有空ID类别的新表,如果您的表之间没有强大的链接,那么将其替换为新值
CREATE TABLE结果SELECT table1.id,table1.text,table2.id as id_category,f1,f2FROM table1INNER JOIN excel ON excel.text = table1.textINNER JOIN table2 ON table2.category = excel.category
我把小写字母放在所有表格字段中对我来说更容易。
希望是帮助
此致