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

เพิ่มคอลัมน์ชั่วคราวพร้อมค่าคงที่ใน MySQL SELECT

ใน MySQL สามารถเพิ่ม Derived Column (คอลัมน์คำนวณ/ค่าคงที่) ในคำสั่ง SELECT ได้โดยตรง โดยไม่ต้อง ALTER TABLE จริงๆ

รูปแบบคำสั่ง

SELECT column1, column2, ..., 'constant_value' AS alias_name 
FROM yourTableName;

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE TemporaryColumnWithValueDemo (
    -> StudentId INT,
    -> StudentName VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.59 sec)

mysql> INSERT INTO TemporaryColumnWithValueDemo VALUES 
    -> (101, 'John'), (102, 'Johnson'), (103, 'Carol'), (104, 'Sam');

2. ดูข้อมูลเดิม

mysql> SELECT * FROM TemporaryColumnWithValueDemo;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 101       | John        |
| 102       | Johnson     |
| 103       | Carol       |
| 104       | Sam         |
+-----------+-------------+
4 rows in set (0.00 sec)

3. เพิ่มคอลัมน์ชั่วคราว TempCollegeName = 'M.I.T.'

mysql> SELECT StudentId, StudentName, 'M.I.T.' AS TempCollegeName 
    -> FROM TemporaryColumnWithValueDemo;
+-----------+-------------+-----------------+
| StudentId | StudentName | TempCollegeName |
+-----------+-------------+-----------------+
| 101       | John        | M.I.T.          |
| 102       | Johnson     | M.I.T.          |
| 103       | Carol       | M.I.T.          |
| 104       | Sam         | M.I.T.          |
+-----------+-------------+-----------------+
4 rows in set (0.00 sec)

กรณีใช้งานจริง

เพิ่มคอลัมน์คำนวณ (Computed Column)

SELECT 
    product_id,
    price,
    quantity,
    price * quantity AS total_amount,
    CASE 
        WHEN price * quantity > 1000 THEN 'High'
        WHEN price * quantity > 500 THEN 'Medium'
        ELSE 'Low'
    END AS order_tier
FROM order_items;

เพิ่ม Metadata สำหรับ Export/Report

SELECT 
    *,
    '2024-Q1' AS report_period,
    CURRENT_USER() AS exported_by,
    NOW() AS exported_at
FROM sales_data;

ใช้ใน UNION

SELECT id, name, 'employee' AS type FROM employees
UNION ALL
SELECT id, name, 'customer' AS type FROM customers;

ข้อดีของวิธีนี้

  • ไม่เปลี่ยนโครงสร้างตาราง (No DDL, No Lock)
  • ยืดหยุ่น เปลี่ยนค่าได้ทุก Query
  • ประหยัดพื้นที่เก็บข้อมูล
  • เหมาะสำหรับ Reporting, Export, API Response

ข้อจำกัด: ไม่สามารถใช้ใน WHERE / GROUP BY / ORDER BY ได้โดยตรง ต้องห่อด้วย Subquery หรือ CTE

-- ❌ ไม่ได้
SELECT * FROM t WHERE 'M.I.T.' = 'M.I.T.';

-- ✅ ได้ (ใช้ Alias)
SELECT *, 'M.I.T.' AS college FROM t WHERE college = 'M.I.T.';  -- MySQL อนุญาตในบางเวอร์ชัน

-- ✅ มั่นใจ (ใช้ Subquery)
SELECT * FROM (SELECT *, 'M.I.T.' AS college FROM t) AS sub WHERE college = 'M.I.T.';