2012-05-07 20 views
21

Tôi cố gắng này với MySQL:DELETE FROM `table` AS` alias` ... WHERE `alias`.`column` ... tại sao lỗi cú pháp?

DELETE FROM `contact_hostcommands_relation` AS `ContactHostCommand` WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1 

Và tôi có được điều này:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1' at line 1 

Lưu ý: Truy vấn này được tự động tạo ra và điều kiện này được dựa trên bí danh bảng.

Tại sao tôi gặp phải lỗi này?

Có cách nào để sử dụng bí danh bảng trong mệnh đề where không?

Đây có phải là MySQL cụ thể không?

+1

Thử tương tự không có 'AS'. Chỉ cần loại bỏ nó. – sp00m

+0

@ sp00m Tôi đã thử nhưng không hoạt động. Cảm ơn cho ý tưởng anyway. –

Trả lời

27

Bạn có thể sử dụng SQL như thế này:

DELETE FROM ContactHostCommand 
USING `contact_hostcommands_relation` AS ContactHostCommand 
WHERE (ContactHostCommand.`chr_id` = 999999) 
LIMIT 1 
+0

Tuyệt. Đây có phải là MySQL cụ thể không? –

+0

Không thực sự biết vì tôi chỉ cần điều này trong MySQL. Tôi đoán đây là một giải pháp cho MySQL không hỗ trợ DELETE từ bí danh. – Sarunas

+2

cho MSSQL: DELETE ContactHostCommand FROM 'contact_hostcommands_relation' AS ContactHostCommand – Matus

5

Bạn không thể sử dụng AS trong một điều khoản DELETE với MySQL:

DELETE FROM `contact_hostcommands_relation` WHERE (`chr_id` = 999999) LIMIT 1 
+0

Nó hoạt động. Nhưng tôi cần bí danh bảng để chỉ định điều kiện cho trình tạo truy vấn. Bây giờ tôi đang sử dụng một biến đặc biệt chứa tên mô hình hiện tại. Tên model khác với tên bảng. Là một câu hỏi về tính đồng nhất. –

+3

Thực ra, anh ấy có thể. Xem câu trả lời được chấp nhận. –

22

gì @Matus và @CeesTimmerman nói về MSSQL, làm việc trong MySQL 5.1 .73 quá:

delete <alias> from <table> <alias> where <alias>.<field>...