समस्या यह है कि MySQL, किसी भी कारण से, आपको इस तरह के प्रश्न लिखने की अनुमति नहीं देता है:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
यानी, अगर आप UPDATE
कर रहे हैं /INSERT
/DELETE
किसी तालिका पर, आप उस तालिका को किसी आंतरिक क्वेरी में संदर्भित नहीं कर सकते (आप कर सकते हैं हालांकि उस बाहरी तालिका से किसी फ़ील्ड का संदर्भ लें...)
समाधान myTable
. के उदाहरण को बदलना है उप-क्वेरी में (SELECT * FROM myTable)
. के साथ , इस तरह
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
यह स्पष्ट रूप से आवश्यक क्षेत्रों को एक अस्थायी तालिका में निहित रूप से कॉपी करने का कारण बनता है, इसलिए इसकी अनुमति है।
मुझे यह समाधान मिला यहां . उस लेख का एक नोट:
<ब्लॉकक्वॉट>
आप केवल SELECT * FROM table
. नहीं चाहते हैं वास्तविक जीवन में सबक्वेरी में; मैं सिर्फ उदाहरणों को सरल रखना चाहता था। वास्तव में, आपको उस अंतरतम क्वेरी में केवल उन स्तंभों का चयन करना चाहिए जिनकी आपको आवश्यकता है, और एक अच्छा WHERE
जोड़ना चाहिए परिणाम भी सीमित करने के लिए खंड।