2012-08-22 17 views
27

अरे सब मैं यह पता लगाने की VB.net में निम्नलिखित क्वेरी स्ट्रिंग का उपयोग कर एक नया रिकॉर्ड सम्मिलित करने के बारे में जाने के लिए कैसे कोशिश कर रहा हूँ:सम्मिलित बायाँ शामिल हों और भीतरी शामिल हों का उपयोग कर

SELECT user.id, user.name, user.username, user.email, 
    IF(user.opted_in = 0, 'NO', 'YES') AS optedIn 
FROM 
    user 
    LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id 
ORDER BY user.id; 

मेरे INSERT क्वेरी अब तक यह है:

INSERT INTO user 
SELECT * 
FROM user 
    LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id; 

हालांकि, मुझे यकीन नहीं है कि VALUE('','','','', etc etc) को बाएं और आंतरिक जोड़ों का उपयोग करते समय कैसे करना है।

तो मुझे क्या करना रहा हूँ यह है:

User तालिका:

id | name  | username | password     | OptIn 
-------------------------------------------------------------------- 
562  Bob Barker bBarker  [email protected] 1 

और यह भी user_permission तालिका

user_id | Permission_id 
------------------------- 
562   4 

अद्यतन तो इस तरह ?

INSERT INTO user (name, username, password, email, opted_in) VALUES ('Bbarker','Bbarker','blahblahblah','[email protected]',0); 
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4); 
+0

आप 'उपयोगकर्ता' में क्यों मूल्य डाल रहे हैं जब आपने 'उपयोगकर्ता' से मूल्यों का चयन किया है? आप किस नई पंक्ति को सम्मिलित करना चाहते हैं? –

उत्तर

29

आप स्तंभ आप चयन कर रहे हैं के बारे में विशिष्ट होना चाहिए। यदि आपकी user तालिका में चार कॉलम id, name, username, opted_in थे, तो आपको क्वेरी से बिल्कुल चार कॉलम चुनना होगा।

INSERT INTO user (id, name, username, opted_in) 
    SELECT id, name, username, opted_in 
    FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id 

हालांकि, वहाँ के बाद से है कि तालिका में कॉलम में से कोई भी user में डाला जा सकता है, यहाँ user_permission के खिलाफ शामिल होने के लिए किसी भी कारण हो सकता है प्रतीत नहीं होता है: वाक्य रचना की तरह दिखता है। वास्तव में, यह INSERT प्राथमिक कुंजी विशिष्टता उल्लंघन के साथ असफल होने लगता है।

MySQL एक ही समय में एकाधिक तालिकाओं में आवेषण का समर्थन नहीं करता है। आपको पहली क्वेरी से अंतिम डालने आईडी का उपयोग करके, या तो प्राथमिक तालिका पर ट्रिगर बनाने के लिए, अपने कोड में दो INSERT कथन करने की आवश्यकता है।

INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0); 
/* Gets the id of the new row and inserts into the other table */ 
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4) 

या एक trigger का उपयोग कर:

CREATE TRIGGER creat_perms AFTER INSERT ON `user` 
FOR EACH ROW 
BEGIN 
    INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4) 
END 
+0

मुझे user_permission तालिका में साथ ही उपयोगकर्ता तालिका के साथ-साथ पंक्ति डालने की आवश्यकता है। मुझे यह कैसे करना है? – StealthRT

+0

मेरे ओपी को बेहतर तरीके से समझाने के लिए अपडेट किया गया कि मैं क्या करना चाहता था। – StealthRT

+0

@StealthRT आप एकाधिक पंक्तियों के बिना 2 पंक्तियों में नई पंक्तियां नहीं डाल सकते हैं, या पहली तालिका पर ट्रिगर नहीं डाल सकते हैं। –

15

आप VALUES खंड उपयोग नहीं कर सकते जब एक और SELECT क्वेरी का उपयोग कर डेटा डालने। देखें INSERT SYNTAX

INSERT INTO user 
(
id, name, username, email, opted_in 
) 
(
    SELECT id, name, username, email, opted_in 
    FROM user 
     LEFT JOIN user_permission AS userPerm 
      ON user.id = userPerm.user_id 
); 
+0

उत्तर के साथ उत्तर देने के लिए समय निकालने के लिए धन्यवाद, ओमेश! – StealthRT

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