2012-09-16 32 views
10

Gần đây tôi đã gặp phải một sự kỳ quặc. Sau đây là SQL hợp lệ:output_expression cho "DELETE FROM table" làm gì?

DELETE FROM customer *; 

Các tài liệu cho PostgreSQL DELETE nói ngôi sao là một giá trị có thể cho output_expression:

Một biểu thức cần tính toán và trả về bởi lệnh DELETE sau mỗi hàng bị xóa. Biểu thức có thể sử dụng bất kỳ tên cột nào của bảng hoặc bảng được liệt kê trong SỬ DỤNG. Viết * để trả về tất cả các cột.

Tôi đã thử nó có và không có dấu sao và không thể thấy sự khác biệt. Trong thực tế, tôi có thể đặt bất kỳ từ đơn nào sau tên bảng và nó được chấp nhận. Nó thậm chí không phải là một tên cột thực tế. Không có gì thêm được trả lại.

db=> DELETE FROM customer wheeeeeee; 
DELETE 19 

Vậy tôi làm gì và tôi có thể sử dụng nó để làm gì?

Câu hỏi also posted on the PostgreSQL mailing list.

+0

Tại sao không thử và tìm hiểu? –

+0

Tôi đã làm. Nó chỉ xóa các hàng và trả về không có gì đặc biệt. –

+4

Có vẻ như bạn đã bỏ lỡ 'RETURNING', một phần không bắt buộc của ngữ pháp trước' output_expression' tôi giả sử rằng '*' chỉ được coi là một bí danh (như cho 'wheeeeeee') mà không có nó. –

Trả lời

5

Dấu hoa thị là không output_expression, vì điều này bạn sẽ phải sử dụng từ khóa RETURNING. Thay vào đó, nó là một cú pháp cũ, lỗi thời cho việc bao gồm các bảng con trong các truy vấn. (Phiên bản cuối cùng mà tài liệu đó có vẻ là PostgreSQL 8.1. Vì cú pháp vẫn hợp lệ, đó là lỗi tài liệu, như Tom Lane chỉ ra trong bài đăng được liên kết bên dưới.)

Vì PostgreSQL 7.1 đây là mặc định (trừ khi sql_inheritance được đặt thành tắt) và từ khóa ONLY được sử dụng để đối diện, vì vậy * không phải là rất hữu ích.

Xem this explanatory post from Tom Lane on the PostgreSQL mailing list.

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