MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Khắc phục “ERROR 1054 (42S22):Cột không xác định‘… ’trong‘ on mệnh đề ”trong MariaDB

Nếu bạn gặp lỗi đọc nội dung như “ ERROR 1054 (42S22):Cột không xác định‘ tab.ColName ’trong‘ trên mệnh đề ” ”Trong MariaDB, đây là ba nguyên nhân có thể xảy ra:

  • Cột này không tồn tại.
  • Bạn đang cố gắng tham chiếu đến một cột bí danh theo tên cột của nó.
  • Hoặc có thể là theo cách khác. Bạn có thể đang tham chiếu cột với một bí danh chưa từng được khai báo.

Nếu một cột có bí danh, thì bạn phải sử dụng bí danh đó khi tham chiếu nó trong bất kỳ ON nào mệnh đề khi thực hiện một phép nối với hai hoặc nhiều bảng. Ngược lại, nếu bạn tham chiếu một cột bằng bí danh, thì bạn cần đảm bảo rằng bí danh đó thực sự được khai báo ngay từ đầu.

Ví dụ 1

Dưới đây là một ví dụ về mã tạo ra lỗi:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;

Kết quả:

ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'

Ở đây tôi đã vô tình sử dụng c.DogName trong ON khi tôi định sử dụng c.CatName .

Trong trường hợp này, cách khắc phục rất đơn giản. Sử dụng đúng tên cột:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Ví dụ 2

Dưới đây là một ví dụ khác về mã tạo ra lỗi:

SELECT 
    CatId,
    CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Kết quả:

ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'

Ở đây tôi đã tham chiếu đến một bí danh không tồn tại trong ON mệnh đề. Tôi đã sử dụng c.CatName để tham khảo CatName trong cột Cats bàn. Vấn đề duy nhất là Cats bảng không có bí danh.

Để khắc phục sự cố này, tất cả những gì chúng tôi phải làm là cung cấp bí danh cho Cats bảng:

SELECT 
    CatId,
    CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Ngoài ra, chúng tôi có thể xóa tất cả các tham chiếu đến bí danh và chỉ sử dụng tên bảng đầy đủ:

SELECT 
    CatId,
    CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;

Một điều tôi nên chỉ ra là, trong ví dụ này, chúng tôi không đặt tiền tố tên cột trong SELECT danh sách với bí danh. Nếu chúng tôi đã làm điều đó, chúng tôi sẽ gặp lỗi tương tự, nhưng với một thông báo hơi khác:

SELECT 
    c.CatId,
    c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Kết quả:

ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'

Trong trường hợp này, nó đã phát hiện các cột không xác định trong danh sách trường trước khi tìm thấy cột trong ON mệnh đề. Dù bằng cách nào thì giải pháp cũng giống nhau.

Ví dụ 3

Dưới đây là một ví dụ khác về mã tạo ra lỗi:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;

Kết quả:

ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'

Trong trường hợp này, một bí danh đã được khai báo cho Cats nhưng tôi không sử dụng bí danh đó trong ON mệnh đề.

Giải pháp ở đây là sử dụng bí danh thay vì tên bảng:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo lưu trữ bản sao lưu MariaDB của bạn trên đám mây

  2. Cách thay thế MySQL hoặc MariaDB Master trung gian bằng máy chủ Binlog sử dụng MaxScale

  3. Cách MINUTE () hoạt động trong MariaDB

  4. MariaDB Backup &PostgreSQL trong đám mây - ClusterControl Release 1.6.1

  5. MariaDB &Dữ liệu bên ngoài