我想查询单个表并选择具有相似标题的任何条目。类似的标题是具有完全相同的字符串的标题(不区分大小写)但附加了“(新鲜)”。结果应返回任何匹配项的id
和title
。
例如,如果这是我的表:
ID TITLE
1 Bacon
2 Eggs
3 Eggs (fresh)
4 ketchup
5 Ketchup (Fresh)
然后我想提取:
array(
array(
id => 2
title => Eggs
),
array(
id => 3
title => Eggs (fresh)
)
),
array(
array(
id => 4
title => ketchup
),
array(
id => 5
title => Ketchup (Fresh)
)
)
目前我正在使用两个单独的查询。首先,我选择所有标题,然后循环查找哪些条目的标题附加了“(新鲜)”。我确信必须有一种更有效的方法在一个查询中提取这些匹配的标题,但我不能指责它。
答案 0 :(得分:2)
试试这个:
select src.id ID_wo_fresh, tgt.id ID_w_fresh, src.title
from tbl src
inner join tbl tgt on src.title= replace(replace(tgt.title,' (fresh)',''),' (Fresh)','')
and src.id <> tgt.id
这将返回名称中没有“fresh”或“Fresh”的产品ID,名称中带有“fresh”或“Fresh”的ID以及名称本身。请注意,这将排除找不到匹配的行,即仅具有带或不带后缀的名称,但不包括两者。要显示所有行,请改用left join
。