sql - MYSQL Update find foreign key that match a condition and replace them foreign key that matches a different condition -


मेरे पास एक टेबल है

  TAB_A id | COUNTRY_ID | वैल 1 | 1 | Val_x 2 | 1 | Val_y 3 | 1 | Val_z 4 | 2 | Val_x 5 | 2 | Val_y 6 | 2 | val_z   TAB_A जहां  Ta_A.VAL = 'val_x' और Table_A.COUNTRY_ID = Table_B.COUNTRY_ID  से आईडी 

Tab_B.id_tab_A वर्तमान में स्टोर किया जाता है। उदाहरण के लिए TAB_B (1,1,1) का प्रतिनिधित्व TABLE_B (id = 1) = & gt; TABLE_A (1,1, वैल_एक्स)

  ओल्ड TAB_B आईडी | COUNTRY_ID | Id_tab_A 1 | 1 | 1 2 | 2 | 4   

मैं प्रतिस्थापित करना चाहते हैं सभी TAB_B.id_val_A ऐसी है कि:

  अगर TAB_B.id_val_A TAB_A.VAL = 'val_x' के लिए आईडी के बराबर है यह TAB_A.VAL = 'val_x'   

के लिए आईडी बनता है और पाठ्यक्रम COUNTRY_ID को भी बराबर होना चाहिए

  NEW TAB_B आईडी | COUNTRY_ID | Id_tab_A 1 | 1 | 2 2 | 2 | 5   

मैं 2 प्रश्नों का उपयोग नहीं कर सकता क्योंकि COUNTRY_ID निश्चित नहीं हैं (एक ही अन्य मामले में 3,4,5 आदि हो सकते हैं):

  अद्यतन TAB_B टीबी, TAB_A टा सेट tb.id_tab_A = (ta.id टा से का चयन करें जहां ta.COUNTRY_ID = 1 और tb.VAL = 'val_y') जहां ta.VAL = 'val_x' और Ta.COUNTRY_ID = tb.COUNTRY_ID; अद्यतन TAB_B टीबी, TAB_A टा सेट tb.id_tab_A = (टा से ta.id का चयन करें जहां ta.COUNTRY_ID = 1 और tb.VAL = 'val_y') जहां ta.VAL = 'val_x' और ta.COUNTRY_ID = tb.COUNTRY_ID;   

मैं उपयोग नहीं कर सकते:

  अद्यतन TAB_B टीबी, TAB_A टा सेट tb.id_tab_A = (ta.id टा कहां ta.COUNTRY_ID = टीबी से चुनें। COUNTRY_ID और tb.VAL = 'val_y') कहां ta.VAL = 'val_x' और ta.COUNTRY_ID = tb.COUNTRY_ID;   

आंतरिक चयन के रूप में SELECT ta.id FROM ta WHERE ta.COUNTRY_ID = tb.COUNTRY_ID और tb.VAL = 'val_y' एक से अधिक मान। < / P>

ठीक है, असल में यह केवल यह अपडेट है क्वेरी:

  अद्यतन Taba टा अंदरूनी TABB टीबी शामिल हों पर ta.COUNTRY_ID = tb.COUNTRY_ID और ta.VAL = 'val_y' सेट tb.id_tab_A = ta.id;   
  • इसे देखें

    आप कहते हैं, कि यह जटिल) का उपयोग नहीं किया जा सकता, क्योंकि यह आपके सबक्वेंसी में एक से अधिक मान वापस करेगा। (भविष्य का संकेत, आपके नमूना डेटा में ऐसे मामलों को प्रतिबिंबित करें। नमूना डेटा सभी (किनारे) मामलों को परीक्षण करने के लिए है।) उस मामले में, आपको स्पष्ट रूप से टैबबी और एक साधारण अपडेट में अधिक प्रविष्टियों की आवश्यकता है काम नहीं करेगा, सिवाय इसके कि जब आप एक कॉलम में एकाधिक प्रविष्टियां संग्रहीत करना चाहते हैं ऐसा मत करो, यह पहले सामान्य रूप का उल्लंघन कर रहा है (सामान्यीकरण के बारे में पढ़ें, अगर आपको नहीं पता कि मैं किस बारे में बात कर रहा हूँ)

    फिर भी, आपका छोटा सा नमूना डेटा दिया जाने वाला बड़ा सवाल यह है, आप सभी को परेशान क्यों करते हैं? सबसे तार्किक बात यह है कि उन दो तालिकाओं को मर्ज करना होगा। TabB में जो कुछ भी जानकारी संग्रहीत है वह कुंजी country_id पर निर्भर है जो TabA में अनावश्यक है। मेरी सलाह, अपने डेटाबेस डिजाइन पर पुनर्विचार करें।

Comments

Popular posts from this blog

Delphi: missing interface declarations for UI Automation methods -

android - How to attach an image from an app to gmail -

php - how to change mysql_result($res, 0, "url"); to mysqli -