2012-03-28 36 views
5

Khi tôi cố gắng chạy một thói quen tôi nhận được lỗi sau:Lỗi MySQL Mã 1166. Tên cột không chính xác

Error Code: 1166. Incorrect column name 'School.`School Name` = case when School.`Web School Name` is null then School.`School Name` els'

Tôi đã hai lần kiểm tra tên cột và có trong thực tế, một School.School Name. Không có không gian đầu hoặc cuối. Đây là sự bắt đầu của thói quen mà lỗi đề cập đến:

CREATE temporary TABLE tt_Step1 
SELECT DISTINCT State.Code, State.Name, 
School.`School Name` = case 
    when School.`Web School Name` is null then School.`School Name` 
    else School.`Web School Name` 
    end, 
School.`School ID` 
-- Into tt_Step1 
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ... 

Gần đây tôi đã chuyển mã này từ MSSQL sang MySQL để có thể có điều gì đó mà tôi bỏ sót nhưng tôi không thể tìm thấy lỗi nào. Truy vấn MSSQL gốc chạy tốt trong SQL Server Management Studio nhưng phiên bản được chuyển đổi của nó trong MySQL thì không.

+0

Tên cột có không gian không thể xảy ra trong MySQL: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html –

+3

@ DavidBélanger: Điều đó hoàn toàn không đúng sự thật. Điều duy nhất mà tài liệu được liên kết nói là 'không thể ** kết thúc ** với ký tự khoảng trắng'. – mellamokb

+1

Tại sao bỏ phiếu này? Đây là một câu hỏi SO hoàn hảo. –

Trả lời

3

này cung cấp cho một shot:

CREATE temporary TABLE tt_Step1 
SELECT DISTINCT State.Code, State.Name, 
coalesce(School.`Web School Name`, School.`School Name`), 
School.`School ID` 
-- Into tt_Step1 
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ... 
+0

Tôi đã sử dụng "coalesce (School.'Web School Name', School.'School Name') là' School Name' ". Điều này chủ yếu là hoạt động nhưng đôi khi Tên trường quay trở lại thành 0 hoặc 1 cho một số mục nhập. –

+0

Tất cả coalesce là kiểm tra đối số đầu tiên cho null, nếu nó là null, sử dụng đối số thứ hai thay thế. Nếu bạn đang lấy lại "0" và "1" từ sự kết hợp, đó là vì có dữ liệu trong bảng Trường học của bạn với "0" và "1" trong các cột đó. – robertvoliva

+0

Vâng, tôi không chắc chuyện gì đang diễn ra. Tôi đã kiểm tra bảng theo cách thủ công và với truy vấn và không tìm thấy bất kỳ giá trị 0 hoặc 1. Dù sao, tôi đã sử dụng câu lệnh trường hợp cũ và đặt bí danh chính xác và cả hai kết quả đều trả về cùng một thứ để tôi chấp nhận câu trả lời này. Tôi có vấn đề khác rõ ràng. Cảm ơn bạn rất nhiều vì đã hỗ trợ. –

2

Bạn có một vài vấn đề.

  1. Bạn không thể đặt bí danh một cột có tên nhiều phần như School.School Name.
  2. Bí danh trong MySql được thực hiện với blah as ColumnName, không phải ColumnName = blah.
0

Trong trường hợp của tôi, đó là do không gian vô hình bổ sung sau tên cột. Tôi đã viết promotion-ids thay vì promotion-id.

Các vấn đề liên quan