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 ý:
DUALlà bảng giả 1 hàng 1 cột, dùng choSELECTkhông cần bảng thật.UNION ALLgiữ trùng lặp, nhanh hơnUNION(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).