2012-05-08 34 views
5

Tôi đang cố gắng chèn bản ghi nếu tổng của 3 cột người dùng từ 2 bảng vượt quá một hằng số.MYSQL INSERT IF SUMs> CONSTANT

Tôi đã tìm kiếm khắp nơi, tìm thấy bạn không thể đặt các biến dùng trong IF s, WHERE 's, vv Tìm thấy bạn không thể đặt SUM s trong IF s, WHERE' s vv Tôi đang ở một Tổng thiệt hại. Dưới đây là một ví dụ về mã xấu trước đây của tôi trước không thành công cố gắng sử dụng SUM s trong WHERE s, nếu nó giúp:

SELECT SUM(num1) INTO @mun1 FROM table1 WHERE user = '0'; 

SELECT SUM(num2) INTO @mun2 FROM table1 WHERE user = '0'; 

SELECT SUM(num3) INTO @mun3 FROM table2 WHERE column1 = 'd' AND user = '0'; 

SET @mun4 = @mun1 - @mun2 - @mun3; 

INSERT INTO table2 (user, column1, column2) VALUES ('0', 'd', '100') WHERE @mun4 >= 100; 

Trả lời

4

Hãy thử điều này:

INSERT INTO table2 (user, column1, column2) 
select '0', 'd', '100' 
from dual 
where (SELECT SUM(num1 + num2) FROM table1 WHERE user = '0') + 
     (SELECT SUM(num3) FROM table2 WHERE column1 = 'd' AND user = '0') > 100; 

Đây là trường hợp của giải pháp chung cho một vấn đề "chèn nếu điều kiện":

insert into ... select ... where condition 

Chọn sẽ chỉ trả về hàng nếu điều kiện là đúng và quan trọng là sẽ không trả lại hàng nếu sai - nghĩa là chèn vào ly xảy ra nếu điều kiện là đúng, nếu không thì không có gì xảy ra.

+0

Thank-bạn rất nhiều vì trả lời nhanh chóng của bạn. Bây giờ, tôi nhận được "# 1064 - Bạn có lỗi trong cú pháp SQL của bạn; hãy kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần 'WHERE (SELECT SUM (..." tại WHERE đầu tiên Nó tương tự như các lỗi mà tôi đã nhận được trong các lần thử trước đây của tôi –

+0

@ user1382306 Tôi đã chỉnh sửa câu trả lời một chút để thêm 'từ kép' - thử ngay bây giờ – Bohemian

1

Đây là giống như @ câu trả lời Bohemian, nhưng bạn phải thêm một điều khoản LIMIT ngừng chèn nhiều hồ sơ, kể từ khi chọn điều khoản có thể trở lại nhiều bản ghi

INSERT INTO table2 (user, column1, column2) 
SELECT  '0', 'd', '100' 
    FROM dual 
    WHERE 
     (SELECT SUM(num1 - num2) FROM table1 WHERE user = '0') 
     (SELECT SUM(num3) FROM table2 WHERE column1 = 'd' AND user = '0') > 
     100 
    LIMIT 1