การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1896 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20),
StudentMarks INT
);
mysql> INSERT INTO DemoTable1896(StudentName, StudentMarks) VALUES
('Chris', 56), ('David', 98), ('Mike', 89), ('Sam', 78);
ดึงค่า StudentName ที่ Marks = 98 เก็บใน Variable
mysql> SET @Name := NULL;
Query OK, 0 rows affected
mysql> SELECT StudentName INTO @Name FROM DemoTable1896 WHERE StudentMarks = 98;
Query OK, 1 row affected
แสดงค่าตัวแปร
mysql> SELECT @Name;
+-------+
| @Name |
+-------+
| David |
+-------+
SELECT INTO Variable
- Syntax:
SELECT col INTO @var FROM table WHERE condition
- Query ต้องคืนค่า 1 Row เท่านั้น (Error ถ้า 0 หรือ >1 Row)
- Variable: User-Defined Variable (
@varname)
การใช้งานต่อ
-- ใช้ใน Query ถัดไป
SELECT * FROM DemoTable1896 WHERE StudentName = @Name;
-- ใช้ใน Stored Procedure
CREATE PROCEDURE get_top_student(OUT name VARCHAR(20))
BEGIN
SELECT StudentName INTO name FROM DemoTable1896 ORDER BY StudentMarks DESC LIMIT 1;
END;
วิธีอื่น: SET กับ Subquery
SET @Name = (SELECT StudentName FROM DemoTable1896 WHERE StudentMarks = 98);
-- ต้องคืน 1 Row 1 Column
ข้อควรระวัง
- Error 1172: Result consisted of more than one row
- Error 1242: Subquery returns more than 1 row
- ใช้
LIMIT 1 ป้องกัน: SELECT ... INTO @var ... LIMIT 1
- Variable Scope: Session Level
กรณีใช้งานจริง
- เก็บค่าระหว่าง Multi-step Operation
- Dynamic SQL ใน Prepared Statement
- Debug/Logging ค่าระหว่าง Procedure
- Pass ค่าระหว่าง Trigger และ Procedure