इसे सरल बनाया जा सकता है:
INSERT INTO translation (id, translated, language_id, template_id)
SELECT tmp.id, tmp.translated, l.id, t.id
FROM tmp_table tmp
JOIN language l USING (langname)
JOIN template t USING (tplname, source, domain)
ORDER BY tmp.id
मैंने एक ORDER BY
. जोड़ा खंड जिसकी आपको सख्त आवश्यकता नहीं है, लेकिन यदि आप अपना डेटा उस (या किसी अन्य) तरीके से सम्मिलित करते हैं तो कुछ प्रश्नों का लाभ हो सकता है।
यदि आप उन पंक्तियों को खोने से बचना चाहते हैं जहाँ आपको language
. में मेल खाने वाली पंक्ति नहीं मिल रही है या template
, इसे LEFT JOIN
. बनाएं इसके बजाय JOIN
दोनों तालिकाओं के लिए (बशर्ते कि language_id
और template_id
NULL
हो सकता है ।
इसके अलावा जो मैंने पहले ही प्रीक्वेल प्रश्न के तहत सूचीबद्ध किया है। :यदि INSERT बहुत बड़ा है और लक्ष्य तालिका का एक बड़ा हिस्सा है, तो संभवत:सभी अनुक्रमणिका को DROP करना तेज़ है लक्ष्य तालिका पर और बाद में उन्हें फिर से बनाएँ। शुरुआत से अनुक्रमणिका बनाना बहुत है तेजी से फिर उन्हें हर पंक्ति के लिए क्रमिक रूप से अपडेट करना।
अद्वितीय इंडेक्स अतिरिक्त रूप से बाधाओं के रूप में काम करते हैं, इसलिए आपको यह विचार करना होगा कि नियमों को बाद में लागू करना है या उन्हें जगह में छोड़ देना है।