मान लें मैं निम्न तालिकाओं है:MySQL क्वेरी तालिका के आधार पर mysql में कॉलम अपडेट करने के लिए?
TableA
a_name | age | country
Jordan | 5 | Germany
Jordan | 6 | Spain
Molly | 6 | Spain
Paris | 7 | France
John | 7 | Saudi Arabia
John | 5 | Saudi Arabia
John | 6 | Spain
tableB
id (auto increment primary key)
| age | country | group_num (initially null)
1 | 5 | Germany |
2 | 6 | Spain |
3 | 7 | France |
4 | 7 | Spain |
5 | 8 | France |
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia |
9 | 5 | Saudi Arabia |
मैं चयन/अद्यतन जहां मैं निम्नलिखित प्राप्त करने में सक्षम हूँ किसी तरह ऐसा करने में सक्षम होना चाहता हूँ "group_num" कॉलम के लिए मान:
टेबलबी
क्यों आईडी के 1,2,3,8,9 सभी एक ही ग्रुप क्योंकि जॉर्डन, मौली, और पेरिस सब का क्या है1) Places person "a_name" went.
2) Whether other people visited that same country. (regardless of age).
कारण:
id (auto increment primary key)
| age | country | group_num
1 | 5 | Germany | 1
2 | 6 | Spain | 1
3 | 7 | France | 1
4 | 7 | Spain |
5 | 7 | France | 2
6 | 9 | France |
7 | 2 | Mexico |
8 | 7 | Saudi Arabia | 1
9 | 5 | Saudi Arabia | 1
group_num के मानदंडों के आधार पर असाइन किया गया है उपरोक्त दो मानदंडों के कारण किसी भी तरह से जुड़ा हुआ हो। (वे सभी स्पेन के लिए गए थे) और अन्य देशों, यानी जर्मनी का दौरा जॉर्डन ने किया था, जिसने स्पेन का दौरा किया था, इसलिए इसमें एक ही समूह_नम है। सऊदी अरब का दौरा जॉन ने किया था, जिसने स्पेन का दौरा किया था, इसलिए इसमें एक ही समूह_नम है।
है वहाँ कुछ एसक्यूएल क्वेरी के (या ऊपर दिखाए गए वांछित परिणाम प्राप्त करने के लिए अन्य "पूरक" टेबल के निर्माण को शामिल नहीं हो सकता है? (यानी यह ठीक है अगर group_num पहले auto_incrementing मूल्यों के साथ भरा होना चाहिए "आईडी" की तरह, फिर आवश्यक होने पर बाद में अपडेट किया गया। (वर्तमान में "(खाली)"
कर्सर/पुनरावृत्ति बहुत धीमी है के रूप में दिखाए गए अन्य मान फ़ील्ड के लिए गैर-शून्य मान होना ठीक है ... निम्नलिखित मान हैं जो मैं उन मानों को भरने के लिए करता हूं, कर्सर का उपयोग करके बहुत धीमी प्रक्रिया, अगर मैं इससे छुटकारा पा सकता हूं तो यह बहुत अच्छा होगा:
- टेबल ए के लिए, हम देखते हैं कि जॉर्डन 5 साल की उम्र में जर्मनी का दौरा किया था। (5_, जर्मनी] के लिए tableB में Group_Num 1 तक अपडेट किया गया है)।
- जॉर्डन 6. उम्र में स्पेन का दौरा (के लिए समूह अंक [6, स्पेन] 1 के लिए अद्यतन अपने ही समूह को दिखाने के लिए के रूप में ही पुरुष जॉर्डन स्पेन का दौरा किया)
- मौली 6 साल की उम्र (के लिए group_num [6 पर स्पेन का दौरा किया , स्पेन] 1 से अपडेट किया गया है, भले ही यह एक अलग व्यक्ति है, वही उम्र/देश जोड़ी मारा गया था)
- पेरिस 7 साल की उम्र में फ्रांस का दौरा किया (tableB में group_num 2 से अपडेट किया गया क्योंकि वह एक अलग व्यक्ति है, पूरी तरह से अलग है देश, भले ही उम्र के।
- जॉन 7 साल की उम्र में सऊदी अरब का दौरा (के लिए group_num [7, सऊदी अरब] उम्र + देश जोड़ी के लिए 3 के लिए अद्यतन tableB में)
- जॉन उम्र 5 पर सऊदी अरब का दौरा (table_num [5, सऊदी अरब] के लिए tableB में उम्र 3 के लिए अपडेट किया गया है + देश की जोड़ी अभी भी जॉन के बाद से अपडेट की गई है)
- जॉन 6 साल की उम्र में स्पेन का दौरा करता है ([6, स्पेन] के लिए group_num पहले से ही 1 है .. जॉर्डन पहले वहां गया , वहाँ कुछ समूह हो सकता है ... सभी स्थानों जॉन का दौरा किया तो group_num [6, स्पेन], [5, सऊदी अरब], और [7, सऊदी अरब] सभी 1
[आपने क्या प्रयास किया है?] (Http://www.whathaveyoutried.com/) देखें [सलाह पूछें] (http://stackoverflow.com/questions/ask-advice), कृपया। –
प्रोग्रामिक रूप से SQLA कर्सर का उपयोग तालिका ए की प्रत्येक पंक्ति के माध्यम से पुनरावृत्त करने के लिए, और आवश्यकतानुसार tableB को अद्यतन करना। यदि SQL क्वेरी (ies) के साथ संभव हो तो ऐसा करने का बेहतर तरीका ढूंढना। – Rolando
दुर्भाग्यपूर्ण है कि उदाहरण के लोगों में जॉर्डन (एक देश) और पेरिस (दूसरे देश में एक प्रसिद्ध शहर) जैसे नाम हैं – Magnus