Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como comparar uma variável de conjunto de usuários no MySQL?


Sim, uma tabela derivada serve. O bloco de seleção interno abaixo é uma tabela derivada. E toda tabela derivada precisa de um nome. No meu caso, xDerived .

A estratégia é deixar a tabela derivada limpar o uso do nome da coluna. Saindo do pedaço derivado é uma coluna limpa chamada num que a seleção externa é livre para usar.

Esquema

create table employee
(   id int auto_increment primary key,
    experience varchar(20) not null
);

-- truncate table employee;
insert employee(experience) values 
('4-5'),('7-1'),('4-1'),('6-5'),('8-6'),('5-9'),('10-4');

Consulta

select id,experience,num 
from 
(   SELECT id,experience, 
    CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) AS num  
    FROM employee  
) xDerived 
where num>=7;

Resultados

+----+------------+------+
| id | experience | num  |
+----+------------+------+
|  2 | 7-1        |    7 |
|  5 | 8-6        |    8 |
|  7 | 10-4       |   10 |
+----+------------+------+

Observe que seu @num conceito estava com defeito, mas espero ter interpretado o que você quis fazer acima.

Além disso, usei 7 e não 3 porque todos os seus dados de amostra teriam retornado e eu queria mostrar a você que funcionaria.