2012-05-08 12 views
5

यदि मैं 2 तालिकाओं के 3 उपयोगकर्ता कॉलम की एक स्थिरता से अधिक है तो मैं एक रिकॉर्ड डालने का प्रयास कर रहा हूं।MYSQL INSERT IF SUMs> CONSTANT

मैं सब कुछ खत्म हो खोज की है, आप IF रों में उपयोगकर्ता चर नहीं डाल सकते, WHERE के आदि, WHERE मिले आप IF रों में SUM नहीं रख सकते हैं पाया रों आदि मैं एक पर हूँ कुल नुकसान। प्रयास करें इस

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; 

उत्तर

4

:

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; 

यह एक के लिए सामान्य समाधान का एक मामला है यहाँ असफल WHERE रों में SUM रों उपयोग करने के लिए अगर यह मदद करता है की कोशिश कर रहा से पहले अपने पहले बुरा कोड का एक उदाहरण है समस्या "अगर हालत डालने":

insert into ... select ... where condition 

चयन केवल पंक्तियों वापस आ जाएगी अगर हालत सही है, और महत्वपूर्ण बात, कोई भी पंक्ति झूठी अगर वापस आ जाएगी - पर डालने अर्थ अगर स्थिति सच होती है तो ly होता है, अन्यथा कुछ भी नहीं होता है।

+0

धन्यवाद-बहुत-बहुत कई रिकॉर्ड वापस आ सकते हैं मिला है। अब, मुझे "# 1064 मिल रहा है - आपको अपने एसक्यूएल सिंटैक्स में एक त्रुटि है; मैनुअल को जांचें जो सही मायने में सर्वर के लिए सही सिंटैक्स के लिए है, जहां कहीं भी कहें (चयन करें SUM (..." पहले WHERE यह मेरे पिछले प्रयासों में मिली त्रुटियों के समान है। –

+0

@ user1382306 मैंने 'दोहरी से' जोड़ने के लिए थोड़ा जवाब संपादित किया - अभी आज़माएं – Bohemian

1

इस रूप में @ बोहेमियन का जवाब एक ही है, लेकिन आप एक LIMIT कई रिकॉर्ड डालने को रोकने के लिए खंड जोड़ने के लिए के बाद से चयन खंड अपने त्वरित उत्तर के लिए

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 
संबंधित मुद्दे