Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดึงค่าเดียวจากแถวเฉพาะใน MySQL ด้วย SELECT INTO Variable

การเตรียมข้อมูล

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