Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Làm việc với mảng (array) trong MySQL

MySQL **không có kiểu dữ liệu mảng (array)**. Để mô phỏng mảng, dùng bảng tạm, bảng derived, hoặc UNION ALL trên bảng giả DUAL.

Cách 1: UNION ALL trên DUAL

SELECT 1 AS ArrayValue FROM DUAL
UNION ALL SELECT 2 FROM DUAL
UNION ALL SELECT 3 FROM DUAL
UNION ALL SELECT 4 FROM DUAL
UNION ALL SELECT 5 FROM DUAL
UNION ALL SELECT 6 FROM DUAL
UNION ALL SELECT 7 FROM DUAL
UNION ALL SELECT 8 FROM DUAL
UNION ALL SELECT 9 FROM DUAL
UNION ALL SELECT 10 FROM DUAL;

Kết quả (10 hàng, 1 cột):

+------------+
| ArrayValue |
+------------+
| 1          |
| 2          |
| 3          |
| 4          |
| 5          |
| 6          |
| 7          |
| 8          |
| 9          |
| 10         |
+------------+

Cách 2: Bảng tạm / CTE (MySQL 8.0+)

WITH RECURSIVE seq(n) AS (
    SELECT 1
    UNION ALL SELECT n+1 FROM seq WHERE n < 10
)
SELECT n AS ArrayValue FROM seq;

Cách 3: Bảng số (numbers table)

Tạo bảng numbers(n INT PRIMARY KEY) chứa 1..N, dùng cho JOIN, generate series, v.v.

Lưu ý:

  • DUAL là bảng giả 1 hàng 1 cột, dùng cho SELECT không cần bảng thật.
  • UNION ALL giữ trùng lặp, nhanh hơn UNION (không distinct).
  • MySQL 8.0.2+ hỗ trợ VALUES ROW(1), ROW(2), ... (standard SQL): SELECT * FROM (VALUES ROW(1), ROW(2), ROW(3)) AS t(val).