mysql - बाएं जॉइन और इनर जॉइन का उपयोग करके डालें




left-join inner-join (2)

हे सब मैं निम्नलिखित क्वेरी का उपयोग कर एक नया रिकॉर्ड डालने के बारे में जानने का प्रयास कर रहा हूं:

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);

आप किसी अन्य SELECT क्वेरी का उपयोग कर डेटा डालने पर VALUES खंड का उपयोग नहीं कर सकते हैं। इंसर्ट सिंटैक्स देखें

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
);

आपको अपने द्वारा चुने गए कॉलम के बारे में विशिष्ट होना चाहिए। यदि आपकी 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_permission खिलाफ शामिल होने का कोई कारण नहीं user_permission है, क्योंकि उस तालिका के किसी भी कॉलम को user में डाला नहीं जाएगा। वास्तव में, यह INSERT प्राथमिक कुंजी विशिष्टता उल्लंघन के साथ असफल होने लगता है।

MySQL एक ही समय में एकाधिक तालिकाओं में आवेषण का समर्थन नहीं करता है। आपको या तो पहले कोड से अंतिम डालने आईडी का उपयोग करके, अपने कोड में दो INSERT कथन करने की आवश्यकता है, या प्राथमिक तालिका पर AFTER INSERT ट्रिगर के AFTER 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




inner-join