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.