2012-01-22 40 views
7

Tôi đã có cơ sở dữ liệu MySQL có hai bảng (thực sự nhiều hơn nữa). Bảng đầu tiên liên kết số SKU của sản phẩm với một ID tùy ý. Có một bảng thứ hai ghi lại khoảng không quảng cáo Cuối ngày cho mỗi mục dựa trên ID này. Khi khoảng không quảng cáo được thay đổi vì các lý do KHÁC hơn là bán hàng, có một bản ghi được đặt trong bảng thứ hai này với một bộ Boolean thành false. Điều này cho phép tôi nói rằng số mới này không hợp lệ như một véc tơ để bán trước đó, nhưng là cho doanh số bán hàng của ngày hôm sau.MySQL "REPLACE INTO" bằng cách sử dụng lệnh SELECT để kéo một trường

Có một số lỗi cú pháp trong mã này. Tôi vẫn là một sinh viên, và sẽ đánh giá cao sự giúp đỡ trong việc giải thích cách cập nhật kiểu này hoạt động như thế nào. Tôi biết giá trị đầu tiên cần phải đến từ câu lệnh chọn?

Đây là tuyên bố MySQL hiện tại của tôi:

REPLACE INTO sales (`itemID`, `date`, `qty`, `price`) 
VALUES ([itemID], CURDATE(), [qty], 0.00) 
SELECT itemID FROM item WHERE `sku` = [sku] 
+4

Vì vậy, câu hỏi của bạn là gì? –

+0

Có lỗi cú pháp trong câu lệnh. Tôi đã hy vọng một người nào đó có thể cho tôi biết làm thế nào để hình thành một tuyên bố đúng đắn. Tôi đã đập đầu vào tường trên cái này. – psyklopz

Trả lời

16

Thay thế các công việc như chèn, ngoại trừ nếu có hàng có cùng khóa bạn đang cố gắng chèn, nó sẽ bị xóa thay thế thay vì cho bạn lỗi.

Bạn có thể chỉ định đối số trực tiếp:

REPLACE INTO sales(`item_id`, `date`, `qty`, `price`) 
VALUES(15, '2012-01-01`, 5, '120.00') 

hoặc chỉ định họ sử dụng SELECT:

REPLACE INTO sales(`item_id`, `date`, `qty`, `price`) 
SELECT item_id, date, qty, price FROM sales_to_accept 
WHERE sales_id = 721 

Bạn không thể tuy nhiên pha trộn cả hai loại cú pháp trong một truy vấn.

Nhưng có gì ngăn cản bạn từ việc thêm giá trị không đổi như cột cho SELECT là:

REPLACE INTO sales(`item_id`, `date`, `qty`, `price`) 
SELECT item_id, CURDATE(), 5, '74.00' FROM item 
WHERE `sku` = 'something' 
+0

Cảm ơn. Điều đó hoạt động tuyệt vời! Đây chính xác là những gì tôi cần. – psyklopz

+0

Một lời cảnh cáo cho những người trong tương lai gặp phải tình huống này. REPLACE INTO gây ra tất cả các loại địa ngục với AUTOINCREMENT. Truy vấn này là những gì tôi đã kết thúc bằng cách sử dụng một INSERT INTO ON DUPLICATE KEY UPDATE với tùy chọn được đề xuất ở trên 3. – psyklopz

1

Bạn đang cố gắng để làm một thay thế vào và chọn trong báo cáo kết quả tương tự. Nếu bạn đang cố gắng chạy chương trình này bằng cách sử dụng một chương trình nào đó hoặc chỉ cần nhập nó vào MySQL, nếu bạn đặt dấu chấm phẩy sau ) ở cuối phần giá trị, nó sẽ coi nó là 2 yêu cầu riêng biệt.

Nếu bạn đang chạy điều này thông qua PHP, thì bạn sẽ cần phải chia nhỏ nó thành 2 câu lệnh riêng biệt.

REPLACE INTO sales (`itemID`, `date`, `qty`, `price`) 
VALUES ((SELECT itemID FROM item WHERE `sku` = [sku]), CURDATE(), [qty], 0.00) 
+0

Đây không phải là câu hỏi của tôi. Tôi không cố chạy các câu lệnh riêng biệt. Tôi đang cố gắng tìm 'itemID' trong bảng' item' khớp với 'sku' được cung cấp. Sau đó thay thế các thuộc tính khác của 'itemID' này trong bảng' sales'. Đây phải là một truy vấn duy nhất. – psyklopz

+0

Vì vậy, bạn đang hỏi về một subselect, do đó, xem nếu truy vấn cập nhật làm việc cho bạn. –

+0

Cảm ơn. Điều đó hoạt động tuyệt vời! – psyklopz

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