Выбор строк, в которых первые n-символы равны (MySQL) - PullRequest
3 голосов
/ 05 декабря 2008

У меня есть стол с ручками игроков, например:

1 - [N] Laka
2 - [N] James
3 - nor | Brian
4 - nor | John
5 - Player 2
6 - Spectator
7 - [N] Joe 

Оттуда я хочу выбрать всех игроков, у которых совпадают первые n-символы, но я не знаю паттерна, только то, что это первые n-символы. В приведенном выше примере я не хочу возвращать строки 1,2,3,4 и 7.

Это возможно и не слишком дорого делать в MySQL?

Ответы [ 2 ]

6 голосов
/ 05 декабря 2008

Если вы знаете значение 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)
);
3 голосов
/ 05 декабря 2008

Вы можете добавить предложение о существовании.

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] лака
2 - [N] Джеймс
3 - ни | Brian
4 - ни | John
7 - [N] Джо

Добавьте к имени «order by», и вы сможете выполнить всю остальную работу в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...