Mysql
 sql >> Database >  >> RDS >> Mysql

Come confrontare una variabile impostata dall'utente in MySQL?

Sì, andrà bene una tabella derivata. Il blocco di selezione interno sottostante è una tabella derivata. E ogni tabella derivata ha bisogno di un nome. Nel mio caso, xDerived .

La strategia consiste nel lasciare che la tabella derivata ripulisca l'uso del nome della colonna. Dal blocco derivato esce una colonna pulita denominata num che la selezione esterna può utilizzare liberamente.

Schema

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');

Interrogazione

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

Risultati

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

Nota, il tuo @num il concetto era difettoso, ma spero di aver interpretato ciò che intendevi fare sopra.

Inoltre, ho scelto 7 e non 3 perché tutti i tuoi dati di esempio sarebbero stati restituiti e volevo mostrarti che avrebbe funzionato.