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

Ghép nối cột từ 2 bảng khác nhau trong MySQL với CONCAT()

Hàm CONCAT() cho phép nối chuỗi từ các cột của nhiều bảng thông qua JOIN. Ví dụ ghép FirstName từ bảng 1 và LastName từ bảng 2 thành FullName.

Ví dụ minh họa

Tạo 2 bảng:

CREATE TABLE DemoTable1 (FirstName VARCHAR(20));
CREATE TABLE DemoTable2 (LastName VARCHAR(20));

Chèn dữ liệu:

INSERT INTO DemoTable1 VALUES ('Chris'), ('David');
INSERT INTO DemoTable2 VALUES ('Brown'), ('Miller');

Ghép nối với LEFT JOIN (tạo tích Descartes có điều kiện):

SELECT CONCAT(tbl1.FirstName, ' ', tbl2.LastName) AS FullName
FROM DemoTable1 tbl1
LEFT JOIN DemoTable2 tbl2 
  ON tbl2.LastName = 'Brown' OR tbl2.LastName = 'Miller';

Kết quả

FullName
Chris Brown
David Brown
Chris Miller
David Miller

Giải thích

  • Điều kiện JOIN ON tbl2.LastName IN ('Brown','Miller') khớp mọi hàng của tbl1 với 2 hàng tbl2 → 2×2 = 4 kết quả.
  • CONCAT(s1, ' ', s2) nối chuỗi với dấu cách.

⚠️ Cảnh báo: Thiếu điều kiện JOIN đúng

Ví dụ trên dùng điều kiện lọc trên bảng 2 chứ không phải khóa liên kết (foreign key). Trong thực tế, cần cột khóa chung:

-- Thiết kế đúng: có cột liên kết
CREATE TABLE Users (id INT PRIMARY KEY, first_name VARCHAR(20));
CREATE TABLE Profiles (user_id INT PRIMARY KEY, last_name VARCHAR(20), FOREIGN KEY (user_id) REFERENCES Users(id));

-- JOIN đúng
SELECT CONCAT(u.first_name, ' ', p.last_name) AS full_name
FROM Users u
JOIN Profiles p ON u.id = p.user_id;

Các hàm nối chuỗi khác

  • CONCAT_WS(',', col1, col2, col3): Nối với separator, tự bỏ qua NULL.
  • GROUP_CONCAT(): Nối nhiều hàng thành 1 chuỗi (đã thấy ở bài trước).