我有一张带有玩家手柄的桌子,如下所示:
1 - [N] Laka
2 - [N] James
3 - nor | Brian
4 - nor | John
5 - Player 2
6 - Spectator
7 - [N] Joe
从那里我想选择第一个 n-chars 匹配的所有玩家,但我不知道模式,只是它是第一个 n-chars。在上面的示例中,我不希望它返回第 1、2、3、4 和 7 行。
这在 MySQL 中是否可行且不会太贵?
如果你知道 n 的值,你可以这样做(对于 n=3):
Select *
FROM players
WHERE Left(name, 3) in (
SELECT Left(name, 3)
FROM players
GROUP BY Left(name, 3)
HAVING (Count(*) > 1)
);
您可以添加一个存在子句。
select name from players p1 where exists (
select 1 from players p2 where
p2.name like CONCAT( SUBSTRING(p1.name, 1, 3), '%')
and p1.name <> p2.name )
这会给你:
1 - [N] Laka
2 - [N] James
3 - 也不 | 布赖恩
4 - 也没有 | 约翰
7 - [N] 乔
在名称上添加“order by”,您可以在代码中完成其余的工作。