Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie vergleiche ich eine Benutzersatzvariable in MySQL?

Ja, eine abgeleitete Tabelle reicht aus. Der innere Auswahlblock unten ist eine abgeleitete Tabelle. Und jede abgeleitete Tabelle braucht einen Namen. In meinem Fall xDerived .

Die Strategie besteht darin, die abgeleitete Tabelle die Verwendung des Spaltennamens bereinigen zu lassen. Aus dem abgeleiteten Chunk kommt eine saubere Spalte mit dem Namen num die die äußere Auswahl frei verwenden kann.

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

Abfrage

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

Ergebnisse

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

Beachten Sie, Ihr @num Das Konzept war fehlerhaft, aber hoffentlich habe ich interpretiert, was Sie oben tun wollten.

Außerdem habe ich mich für 7 und nicht für 3 entschieden, weil alle Ihre Beispieldaten zurückgegeben worden wären, und ich wollte Ihnen zeigen, dass es funktioniert.