用户变量中LIKE中的转义符



我正试图从一个具有两列的本地文件加载数据,其中一列没有直接插入,而是映射到查找表中的id。但是,我要查找的字符串包含一个下划线,它由LIKE解释,不是所需的效果。

在进行普通查询时,我只会用_转义_,但由于它在用户变量中,我找不到如何直接转义此字符。举个例子,使用以下LOAD DATA语句:

LOAD DATA语句:

LOAD DATA INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY 't'
ESCAPED BY ''
LINES TERMINATED BY 'n'
(@foo, bar)
SET foo = (
SELECT id FROM lookup_table
WHERE foo_string
LIKE @foo
LIMIT 1
);

file.csv

STR_1   hi
STR_2   hey

my_table

+--------+---------+-------+
| id     | foo     | bar   |
+--------+---------+-------+
|      1 |       2 | hello |
|      2 |       1 | world |
+--------+---------+-------+

lookup_table

+--------+------------+
| id     | foo_string |
+--------+------------+
|      1 |      STR_1 |
|      2 |      STR_2 |
+--------+------------+

在这个例子中,@fooLIKE解释为STR_1,并且不会匹配任何条目,我希望它是STR_1

可以通过自己添加转义符来更改csv文件格式,但我想知道是否存在";"清洁剂";首先。

看起来是自动完成的。我认为这是我问题的罪魁祸首,但我还有一个完全没有看到的问题,在这里看不到,但我无论如何都会解释我做了什么。

在我的SQL查询中,我使用LOAD DATA INFILE ... (@foo, bar) SET foo_id = (SELECT ...),认为SET会将foo_id映射到表中相应的列。它实际所做的只是创建一个名为@foo_id的未使用的用户变量。

这里的解决方案是在任何地方使用确切的列名作为用户变量,给出类似LOAD DATA INFILE ... (@foo_id, bar) SET foo_id = (SELECT ...)的内容

最新更新