2012-03-14 13 views
9

मुझे बहुत सारे प्रश्न मिल सकते हैं लेकिन मेरी समस्या के लिए कोई वास्तविक समाधान नहीं है।MySQL त्रुटि "ऑपरेंड में 1 कॉलम होना चाहिए"

मेरे SQL क्वेरी:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID, COUNT(ID) AS COUNTER 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNTER = 1) 

त्रुटि कोड मैं प्राप्त

#1241 - Operand should contain 1 column(s) 

अगर मैं सिर्फ कोष्ठकों यह काम करता है में क्वेरी का उपयोग और परिणाम

ID | COUNTER 
0002159 | 1 

है मेरी त्रुटि कहां है? आपकी मदद के लिए बहुत बहुत धन्यवाद।

+0

उर उप-क्वेरी दो कॉलम लौटा रही है और इसका कोई तरीका मान्य नहीं है ... – Teja

उत्तर

0
WHERE ID IN (SELECT ID 
       FROM EIGENSCHAFTEN 
       WHERE Kategorie = "BOUNCE" 
       GROUP BY ID 
       HAVING COUNT(*) = 1) 
1

समस्या अपने सबक्वेरी के साथ है:

SELECT ID, COUNT(ID) AS COUNTER FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" GROUP BY ID HAVING COUNTER = 1 

आप ID की तुलना करने की कोशिश कर रहे हैं, लेकिन दो कॉलम

2

आपका सबक्वेरी में दो कॉलम होते लौट रहे हैं। इस प्रयास करें:

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

मैं COUNT(ID) हटाया ताकि आप केवल आईडी चुनते हैं और आपका HAVING खंड में है कि बजाय डाल दिया।

इसके अलावा, जब तक कि आप सुनिश्चित न हों कि यह क्वेरी कभी भी एक से अधिक पंक्तियों को वापस नहीं करेगी, आपको डुप्लिकेट की संभावना से निपटने की आवश्यकता है। WHERE ID = के बजाय या तो WHERE ID IN पर बदलें या क्वेरी द्वारा दिए गए परिणामों की संख्या सीमित करें। परिणामों को सीमित करने की विधि आपकी आवश्यकताओं पर निर्भर करेगी - सबक्वायरी में LIMIT 1 जोड़ना काम करेगा, लेकिन आप जो कुछ पंक्ति प्राप्त करते हैं उसे निर्दिष्ट करने के लिए आप कुछ सॉर्टिंग करना चाहते हैं या MIN/MAX का उपयोग करना चाहेंगे।

0
UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(*) = 1) 
10

समस्या यह है कि आपकी आंतरिक क्वेरी दो कॉलम लौट रही है। अपनी क्वेरी को

UPDATE ADRESSEN 
SET EMAIL = 0 
WHERE ID = (SELECT ID 
FROM EIGENSCHAFTEN WHERE Kategorie = "BOUNCE" 
GROUP BY ID 
HAVING COUNT(ID) = 1) 

यह काम करना चाहिए।

मेरे पास एक और सुझाव है, क्या आप सुनिश्चित हैं कि आपकी आंतरिक क्वेरी हमेशा एक पंक्ति लौटाएगी? यदि आप आंतरिक क्वेरी द्वारा लौटाए गए एकाधिक आईडी के लिए EMAIL 0 के साथ सेट करना चाहते हैं तो मैं आपको "=" के बजाय "IN" का उपयोग करने की सलाह दूंगा।

संबंधित मुद्दे