在表的所有列上搜索关键字



我有Vehicle_parts如下表,

Vehicle_Sub_Part_Number11111年yyy11111年yyy44444年yyy

您可以在WHERE子句中放置多个LIKE条件,以检查您指定的每个条件。根据您的描述,这个查询将工作:

SELECT vehicle_id, vehicle_major_part_number, vehicle_sub_part_number
FROM vehicle_parts
WHERE vehicle_major_part_number LIKE '11111%'
OR vehicle_major_part_number LIKE '88888%'
OR vehicle_sub_part_number LIKE '11111%'
OR vehicle_sub_part_number LIKE '88888%';

使用LIKE的查询,特别是使用%(标记后面可能会出现的字符)的查询通常很慢,正如你所看到的,它们也可能很长,而且不好读。您还可以尝试这样做:

SELECT vehicle_id, vehicle_major_part_number, vehicle_sub_part_number
FROM vehicle_parts
WHERE CONCAT(vehicle_major_part_number, vehicle_sub_part_number) LIKE '%11111%' OR 
CONCAT(vehicle_major_part_number, vehicle_sub_part_number) LIKE '%88888%';

这可能更好读,但仍然很慢。

如果你确实知道你想要检查哪个字符串,这将使你的查询更短,更容易阅读,并将改善执行时间。为例:

SELECT vehicle_id, vehicle_major_part_number, vehicle_sub_part_number
FROM vehicle_parts
WHERE '11111 xxx' IN (vehicle_major_part_number, vehicle_sub_part_number)
OR '88888 zzz' IN (vehicle_major_part_number, vehicle_sub_part_number);

这当然会比其他选项少两行,但也许您会找到一种方法来防止使用LIKE。这样会好很多。

这里有一个小提琴根据你的例子:db<>fiddle

最新更新