2010-02-16 33 views
6

में चुनें मेरे पास एक mysql तालिका 'अल्फा' है जिसमें एक कॉलम में किसी अन्य तालिका 'बीटा' की प्राथमिक कुंजी होगी। लेकिन अगर 'बीटा' में प्रविष्टि नहीं मिल पाती है तो मैं 'बीटा' में मान डालना चाहता हूं और 'अल्फा' में नई कुंजी का उपयोग करना चाहता हूं। क्या मैं इसे किसी एक प्रश्न में कर सकता हूं?डालें यदि मौजूद नहीं है तो बस mysql

मैं वर्तमान में है:

INSERT INTO alfa SET c1=(SELECT id FROM beta WHERE name = 'john'); 

जो ठीक काम करता है जब 'जॉन' तालिका में मौजूद है, लेकिन अन्यथा विफल रहता है। तो क्या मैं इसे नया नाम डालने और चुनने के लिए बेहतर कर सकता हूं यदि यह पहले से मौजूद नहीं है? आईडी auto_incremented है।

मैंने आईएफ को देखने की कोशिश की है लेकिन अभी तक पता नहीं चला है कि चयन के बाहर IF का उपयोग कैसे करें, क्या यह संभव है?

मुझे पता है कि मैं इसे कई प्रश्नों में कर सकता हूं लेकिन मैं एक दूरस्थ डेटाबेस से बात कर रहा हूं, इसलिए यह सब एक बार में अच्छा लगा।

उदाहरण के लिए टेबल इस तरह बनाया जा सकता था:

CREATE TABLE alfa (
    c1 int, 
    PRIMARY KEY (c1) 
) 

CREATE TABLE beta (
    id int auto_increment, 
    name varchar(255), 
    PRIMARY KEY (id) 
) 

तो alfa.c1 beta.id मूल्यों देखना चाहिए।

संक्षेप में मैं क्या करना चाहते हैं:

अल्फा में c1 में बीटा मेज से जॉन के लिए आईडी डालें, अगर जॉन बीटा में मौजूद नहीं है तो बीटा में जॉन डालें और डालने नई ऑटो के लिए आईडी की संख्या बढ़ अल्फा में सी 1 में जॉन।

+0

क्या आप संभवतः अपना प्रश्न संपादित कर सकते हैं, और कम से कम टेबल संरचनाएं डाल सकते हैं? यह अस्पष्ट है कि आपके पास बीटा में अतिरिक्त जानकारी होगी? और यदि संभवतः अल्फा के पास कोई कुंजी हो, तो यह बीटा में अभी तक नहीं बनाया गया है? –

+0

मैंने अब और जानकारी जोड़ने की कोशिश की है। – Zitrax

उत्तर

3

मुझे जाना होगा, लेकिन ध्यान रखें कि माइक्रोसॉफ्ट एसक्यूएल पृष्ठभूमि से आ रहा है, और मैं आपकी टेबल की सटीक संरचना से परिचित नहीं हूं, इसलिए कुछ एसक्यूएल शायद थोड़ा रोपी है।

IF (SELECT COUNT(*) FROM beta WHERE name = 'John' > 0) 
    UPDATE alfa SET c1=(SELECT id FROM beta WHERE name = 'John') 
ELSE 
BEGIN 
    INSERT INTO beta (name) VALUES ('John') 
    INSERT INTO alfa (c1) VALUES (LAST_INSERT_ID()) 
END 

आशा है कि यह कुछ मदद की है।

+1

पी। यदि आप प्रश्नों की संख्या के बारे में चिंतित हैं, तो संग्रहीत प्रक्रिया का उपयोग क्यों न करें, इस तरह आप अभी भी दूरस्थ सर्वर पर केवल एक कॉल करते हैं। – Bryan

+0

धन्यवाद, यह करीब लग रहा है। लेकिन वाक्यविन्यास अगर है .. ईएलएसई .. अंत अगर। और ऐसा लगता है जैसे IF कथन केवल एक प्रक्रिया में उपयोग किया जा सकता है, इसलिए मुझे किसी भी मामले में इसका उपयोग करना होगा। यहां एक ही मुद्दे पर चर्चा की गई है: http://is.gd/8xupF – Zitrax

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