Cột không xác định trong lỗi 'danh sách trường' trên truy vấn Cập nhật MySQL


127

Tôi liên tục gặp lỗi MySQL # 1054, khi cố gắng thực hiện truy vấn cập nhật này:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

Có thể đó là một số lỗi cú pháp, nhưng tôi đã thử sử dụng một phép nối bên trong thay thế và các thay đổi khác, nhưng tôi vẫn nhận được thông báo tương tự:

Unknown column 'y' in 'field list' 

Câu trả lời:


167

Hãy thử sử dụng các trích dẫn khác nhau cho "y" vì ký tự trích dẫn định danh là backtick (`` `). Mặt khác, MySQL "nghĩ" rằng bạn trỏ đến một cột có tên là "y".

Xem thêm Tài liệu MySQL 5


Tôi đã có điều này khi tôi bối rối và sử dụng dấu ngoặc kép thay vì dấu ngoặc đơn xung quanh chuỗi của tôi.
tripleee

48

Gửi kèm theo bất kỳ chuỗi nào được chuyển đến máy chủ mysql bên trong các dấu ngoặc đơn; ví dụ:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

Lưu ý rằng mặc dù truy vấn được đặt giữa các dấu ngoặc kép, bạn phải đặt bất kỳ chuỗi nào trong dấu ngoặc đơn.


Cảm ơn bạn. Tôi đã cố gắng tìm ra lý do tại sao truy vấn của tôi trong PHP không hoạt động, tất cả những gì tôi phải làm là thêm các trích dẫn.
RiCHiE

1
Tôi biết đây là một bài viết cũ nhưng bạn có thể trả lời tại sao bạn phải đặt dấu ngoặc kép không?
RiCHiE

@RiCHiE thường an toàn hơn khi sử dụng chuỗi. Ngoài ra, có ý nghĩa hơn với tôi để đặt chuỗi giữa các trích dẫn. Ví dụ: khi bạn sử dụng các chức năng như SHA1, bạn đặt dấu ngoặc kép trong nội dung bên trong nhưSHA1('$var')
George

Điều này làm việc cho tôi. Đầu tiên tôi đã thử sử dụng backticks không có may mắn.
radbyx

Hãy thoát tất cả các biến được truyền vào các truy vấn đúng cách! Chỉ cần sử dụng $name = mysqli_real_escape_string($name)để thoát dấu ngoặc kép đúng cách!
Le 'nton

16

Bạn có thể kiểm tra lựa chọn dấu ngoặc kép của mình (sử dụng dấu ngoặc kép / đơn cho các giá trị, chuỗi, v.v. và backticks cho tên cột).

Vì bạn chỉ muốn cập nhật bảng master_user_profilenên tôi đề xuất một truy vấn lồng nhau:

UPDATE
   master_user_profile
SET
   master_user_profile.fellow = 'y'
WHERE
   master_user_profile.user_id IN (
      SELECT tran_user_branch.user_id
      FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);

4

Trong trường hợp của tôi, nó được gây ra bởi một khoảng trống không nhìn thấy ở cuối tên cột. Chỉ cần kiểm tra xem bạn thực sự sử dụng "y" hay "y" thay thế.


2

Khi làm việc trên bản dựng ứng dụng .Net với mã EF trước tiên, tôi đã nhận được thông báo lỗi này khi cố gắng áp dụng di chuyển của mình, nơi tôi có một Sql("UPDATE tableName SET columnName = value");tuyên bố.

Hóa ra tôi viết sai chính tả cột.


1

Chỉ chia sẻ kinh nghiệm của tôi về điều này. Tôi đã có vấn đề tương tự. Câu lệnh chèn hoặc cập nhật là chính xác. Và tôi cũng đã kiểm tra mã hóa. Cột không tồn tại. Sau đó! Tôi phát hiện ra rằng tôi đã tham chiếu cột trong Kích hoạt của tôi. Bạn cũng nên kiểm tra trình kích hoạt của mình xem có tập lệnh nào đang tham chiếu cột bạn đang gặp sự cố không.


1

Chỉ chia sẻ kinh nghiệm của tôi về điều này. Tôi đã có vấn đề tương tự. Truy vấn của tôi là:

select table1.column2 from table1

Tuy nhiên, bảng1 không có cột cột2.


0

Tôi cũng có lỗi tương tự, vấn đề trong trường hợp của tôi là tôi đã bao gồm tên cột trong GROUP BYmệnh đề và nó gây ra lỗi này. Vì vậy, loại bỏ cột khỏi GROUP BYmệnh đề và nó hoạt động !!!


0

Nếu nó là ngủ đông và JPA. kiểm tra tên bảng được giới thiệu của bạn và các cột có thể không khớp


0

Tôi đã gặp lỗi này khi sử dụng GroupBy qua LINQ trên cơ sở dữ liệu MySQL. Vấn đề là thuộc tính đối tượng ẩn danh đang được GroupBy sử dụng không khớp với tên cột cơ sở dữ liệu. Đã sửa bằng cách đổi tên tên thuộc tính ẩn danh để khớp với tên cột.

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

0

Một truy vấn như thế này cũng sẽ gây ra lỗi:

SELECT table1.id FROM table2

Trong đó bảng được chỉ định trong cột chọn và không bao gồm trong mệnh đề from.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.