我有
- 表A: product_id和title 的已知产品
- 表B:带有标题和URL的抓取产品信息
我现在的目标是从表B中找到属于已找到产品的product_id,并将此product_id保存到表B中。
查找产品很容易通过全文搜索:
SELECT
mp.SKU
FROM
my_products mp
WHERE
MATCH (mp.NAME, mp.QUANTITY) AGAINST ('Some title I search for')
LIMIT 1
现在尝试遍历所有找到的产品:
SELECT TITLE, URL,(
SELECT
mp.SKU
FROM
my_products mp
WHERE
MATCH (mp.NAME, mp.QUANTITY) AGAINST (a.TITLE)
LIMIT 1
) SKU
from amazon_products a
where SKU is null
这显然不起作用,因为我不能引用外部表。更不用说更新表并将product_id添加到表b了。这是如何做到的?
从文档中可以看到
搜索字符串必须是在查询求值时保持不变的字符串值。
这就是为什么你的查询不会工作,与子查询无关。
只有LIKE或REGEXP表达式可以处理这个
使用动态sql的存储过程也可以处理这个问题。但是循环遍历所有的可能性要花很长时间您可以尝试下面的更新语句。
推荐MATCH-AGINST
需要against
中的文字值,因此在这里使用类似的函数可能更理想。遍历结果集并每次查询另一个表可能会很昂贵。下面我使用了带有通配符匹配的LIKE
来在更新函数中实现这一点。
create table amazon_products (
product_id int,
title varchar(20),
FULLTEXT KEY (title)
);
create table my_products (
product_id int,
NAME text,
QUANTITY varchar(20) default 'some',
FULLTEXT(NAME, QUANTITY)
);
insert into my_products (product_id,name) values (1,'cardboard'),(2,'tes');
insert into amazon_products values (1,'cars'),(NULL,'test');
查询# 1
select * from amazon_products;