मैं चारों ओर घूमता हूं क्या मैं मेमोरी टेबल में एकत्रित डेटा को केवल एसक्यूएल क्वेरी द्वारा वास्तविक में स्थानांतरित कर सकता हूं।

दो तालिकाओं की संरचना समान है और pk is products_id(int, AI)

समस्या यह है कि मानदंड पीके से बिल्कुल अलग है। उत्पादों को 2 कॉलम - बारकोड और कंपनी द्वारा पहचाना जाता है।

तो पूरी तरह से पीके को अनदेखा करते हुए, मुझे डेटा को अपडेट करने की आवश्यकता है यदि वास्तविक तालिका में एक ही बारकोड और कंपनी के साथ एक पंक्ति है, और यदि कोई नहीं है तो नया रिकॉर्ड डालें।

यह कोशिश की:

INSERT INTO products (products_sku, ...)
SELECT products_sku... FROM temp_products
WHERE (temp_products.products_barcode = products.products_barcode) AND (temp_products.products_comp = products.products_comp)

लेकिन फ़िल्टरिंग करने के लिए मेरे पास चयन तालिका में पहुंच नहीं है

1
V.Rangelov 8 अक्टूबर 2021, 13:47
मेरे पास उत्पादों के चयन में पहुंच नहीं है इसलिए आपको उस तालिका में अपडेट या सम्मिलित करना चाहिए जहां आपके पास पढ़ने की पहुंच नहीं है?
 – 
Lelio Faieta
8 अक्टूबर 2021, 13:52

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि आपको products_barcode और products_comp पर एक अद्वितीय कुंजी जोड़ने की आवश्यकता है:

ALTER TABLE products ADD UNIQUE KEY (products_barcode, products_comp);

एक बार आपके पास यह हो जाने के बाद आप एक कथन में सम्मिलित या अद्यतन कर सकते हैं:

INSERT INTO products (/* all columns except the id */)
SELECT /* all columns except the id */
FROM products_sku
ON DUPLICATE KEY UPDATE some_field = VALUES(some_field), ... 
/* list all columns except the id / barcode / comp */;

तो जब यह एक डुप्लिकेट बारकोड/कॉम्प जोड़ी से मिलता है तो यह ऑन डुप्लीकेट कुंजी अपडेट में आ जाएगा और सम्मिलित नहीं होगा। और पढ़ें कि यह कैसे काम करता है: https://dev। mysql.com/doc/refman/8.0/hi/insert-on-duplicate.html

1
Stalinko 8 अक्टूबर 2021, 13:59
छोटे डेटासेट के साथ स्थानीय रूप से इसका परीक्षण किया और अब तक आकर्षण की तरह काम करता है। मैं उन्हें कुछ क्लॉज के साथ पकड़ने की कोशिश कर रहा था लेकिन आपका विचार शानदार है। धन्यवाद
 – 
V.Rangelov
8 अक्टूबर 2021, 14:28