दो अलग-अलग तालिकाओं से तालिका में मान कैसे डालें?


12

मेरे पास तीन टेबल हैं

students table 
------------------------------------  
id(PK, A_I)  |  student_name | nationality

teachers table
------------------------------------
id(PK, A_I)  |  teacher_name |  email

classroom table
----------------------
id(PK, A_I)   | date   | teacher_id(FK to teachers.id)  |  student_id(FK to students.id)

अगर मैं (शिक्षक का नाम दिया गया था davidउदाहरण के लिए) और student_id ( 7उदाहरण के लिए) और सम्मिलित करने के लिए कहा teacher_idमें classroomके आधार पर तालिका idमें teachersमेज, मुझे क्या करना होगा:

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', id, 7
from teachers
where teacher_name = 'david';

अब, क्या होगा अगर मुझे सीधे छात्र की आईडी नहीं दी गई और केवल छात्र का नाम दिया गया? मान लीजिए कि मुझे शिक्षक का नाम 'दाविद' और छात्र का नाम 'सम' दिया गया। मैं कैसे मिलता है teacher_idसे teachersमेज और भी student_idसे studentsमेज और दोनों डालने में classroomतालिका अपने नाम के आधार पर?

जवाबों:


15

आप इस तरह क्वेरी लिखेंगे

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', t.id, s.id
from teachers t,students s
where t.teacher_name = 'david'
and s.student_name = 'sam';

सावधान रहे। यह कार्टेशियन उत्पाद है। इसके लिए एक और तरीका है

select teacher_id into @tid from teachers where teacher_name = 'david';
select student_id into @sid from students where student_name = 'sam';
insert into classroom (date, teacher_id, student_id) values ('2014-07-08',@tid,@sid);

धन्यवाद सर, क्या मैं यहां इनर ज्वाइन कर सकता हूं?
बाबा कामदेव

एक के लिए कोई ज़रूरत नहीं INNER JOINके बाद से teachersऔर studentsकिसी भी विदेशी कुंजी रिश्ता है।
RolandoMySQLDBA

6

सबसे आसान तरीका है कि आप उप प्रश्नों का उपयोग कर रहे हैं:

 INSERT INTO classroom(teacher_id,student_id)
 VALUES ((SELECT id FROM students WHERE s_name='sam'),
 (SELECT id FROM teacher WHERE t_name='david'));

1
INSERT INTO newtable(value1, value2, value3) 
SELECT value1N, value2N, value3N,(SELECT valueN4 FROM secondtable WHERE id='1') 
FROM firsttable WHERE id='1');

यह रिजल्ट फॉर्म को फर्स्टटेबल value1N, value2N, value3Nऔर रिजल्ट को सेकेंडटेबल से डाल देगाvalueN4

परिणाम:

  • पहली तालिका --- |username|password |name|--- (3 मान है, लेकिन हम एक का उपयोग करते हैं)
  • दूसरी तालिका --- |id_number|Adress|tel|--- (3 मान है, हम सभी का उपयोग करते हैं)
  • क्वेरी के बाद नया विकल्प भरना होगा --- |id_number|Adress|tel|username|----- (हमें 4 मूल्य मिलते हैं: 3 दूसरी तालिका से और 1 पहली तालिका से:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.