2010-01-05 41 views
10

Tôi đang làm việc với một số dữ liệu khá nhạy cảm, vì vậy tôi muốn được TUYỆT ĐỐI chắc chắn tôi đang làm nó đúng cách.DELETE dữ liệu từ một bảng, tham gia thông qua hai bảng

Tôi cố gắng để xóa các hàng trong một bảng có liên quan đến một bảng

Cách duy nhất để kết hợp bảng là tham gia thông qua hai bảng khác ...

đây là truy vấn chính xác :

DELETE tt.Transaction_Amount, tt.Transaction_ID 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

Như bạn có thể thấy, nó không đẹp.

Tôi nhận được một lỗi lẻ mặc dù thông qua trình duyệt truy vấn MySQL ...

unkown bảng 'TRANSACTION_AMOUNT' trong MULTI DELETE

Tôi đã thử đọc hướng dẫn mysql và nó có vẻ như điều này sẽ làm việc với tôi ... bất kỳ ai có ý tưởng nào?

+0

Dường như bạn không sử dụng bảng Giao dịch mà bạn đã tham gia ở nơi khác trong truy vấn của mình. Điều này có chủ ý không? –

+0

Đảm bảo rằng bạn đã sao lưu dữ liệu/cơ sở dữ liệu của mình trước khi xóa. –

+0

Transaction_Type có phải là một bảng không? Có vẻ như bạn đang cố gắng xóa 2 cột khỏi bảng chứ không phải hàng ... –

Trả lời

23

Bạn cần phải xoá bỏ các hàng từ tt, không phải cá nhân cột:

DELETE tt 
    FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 
+0

thankyou !! Nó hoạt động hoàn hảo =) –

+0

Bạn phải chỉ định các bảng cần xóa, hoặc với tên hoặc bí danh, giữa 'DELETE' và' FROM' trong một bảng đa xóa –

+0

@ md5sum: Đó là để xóa nhiều bảng, nhưng tôi cũng vậy không biết nếu nó làm cho một sự khác biệt trong ví dụ này –

0

Bạn nên soạn ban đầu làm truy vấn để trả về các hàng quan tâm. Khi tất cả đã được gỡ lỗi, sau đó chuyển đổi thành xóa.

+0

Tôi có. lựa chọn hoạt động tốt. –

1

Cú pháp không chính xác - bạn don't reference columns giữa DELETEFROM. Sử dụng:

DELETE FROM ItemTracker_dbo.Transaction_Type tt 
    JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID 
    JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID 
    JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID 
WHERE i.Client_ID = 1 

Để chắc chắn bạn đang xóa nội dung chính xác, tôi đồng ý với wallyk rằng bạn nên kiểm tra kết quả của câu lệnh SELECT rằng những gì được trả về là những gì bạn muốn xóa trước đó. Nếu không, hãy thực hiện xóa trong giao dịch để bạn có thể cuộn lại nếu cần.

+1

Đừng nghĩ rằng sẽ làm việc - kiểm tra trả lời của tôi để bình luận của bạn ở trên. –

0

Kiểm tra với lựa chọn truy vấn và sau đó trước khi thực hiện xóa truy vấn trên dữ liệu quan trọng có được một bản sao lưu của bảng đó. đơn giản như thể bất cứ điều gì sai trái thì bạn có thể ít nhất là sao lưu.

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