3

我有一张带有玩家手柄的桌子,如下所示:

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 中是否可行且不会太贵?

4

2 回答 2

6

如果你知道 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)
);
于 2008-12-05T14:50:04.170 回答
3

您可以添加一个存在子句。

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”,您可以在代码中完成其余的工作。

于 2008-12-05T14:27:59.453 回答