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

CONCAT cột cụ thể với bản ghi tương ứng trong MySQL (có điều kiện HAVING)


Giới thiệu

Dùng CONCAT() nối FirstName và CountryName, kết hợp HAVING lọc trên cột alias vừa tạo.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    FirstName VARCHAR(100),
    CountryName VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES 
('Adam', 'US'), ('David', 'AUS'), ('Chris', 'UK'), ('John', 'US'), ('Carol', 'AUS');

Truy vấn CONCAT + HAVING

mysql> SELECT CONCAT(FirstName, ' ', CountryName) AS NameWithCountry 
FROM DemoTable 
HAVING NameWithCountry LIKE '%John%';

Kết quả

+-----------------+
| NameWithCountry |
+-----------------+
| John US         |
+-----------------+

Giải thích

  • CONCAT(FirstName, ' ', CountryName): Nối 2 cột với dấu cách.
  • AS NameWithCountry: Đặt bí danh cho cột kết quả.
  • HAVING NameWithCountry LIKE '%John%': Lọc trên kết quả đã CONCAT. HAVING dùng cho điều kiện trên aggregate/alias, WHERE dùng cho cột gốc.

⚠️ HAVING vs WHERE

Đặc điểmWHEREHAVING
Lọc trênCột gốc / biểu thức đơn giảnCột aggregate / alias SELECT
Thứ tự thực thiTrước GROUP BYSau GROUP BY / SELECT
Hiệu năngTốt (có thể dùng index)Kém (sau khi đã tính toán)

Ví dụ này **nên dùng WHERE** vì lọc trên FirstName (cột gốc):

SELECT CONCAT(FirstName, ' ', CountryName) AS NameWithCountry 
FROM DemoTable 
WHERE FirstName = 'John';

Khi nào bắt buộc dùng HAVING

  • Lọc trên hàm tổng hợp: HAVING COUNT(*) > 1.
  • Lọc trên alias phức tạp: HAVING full_name LIKE '%John%' (nếu full_name là expression phức tạp).