2012-03-13 15 views
10

नीचे बाईं ओर शामिल होने वाली बाएं जॉइन का उपयोग करके मेरी क्वेरी है। मैं जो करना चाहता हूं वह है कि एक और टेबल इस क्वेरी को कभी भी फ़िल्टर करें, लेकिन ऐसा करने में परेशानी हो रही है। मैं इस नई तालिका table_3 पर कॉल करूंगा और table_3.rwykey = runways_updatable.rwykey कहां जोड़ना चाहता हूं। किसी भी मदद को बहुत, बहुत सराहा जाएगा।एक ही प्रश्न में बाएं जुड़ने और आंतरिक शामिल होने का उपयोग

SELECT * 
FROM RUNWAYS_UPDATABLE 
LEFT JOIN TURN_UPDATABLE 
ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY 
WHERE RUNWAYS_UPDATABLE.ICAO = 'ICAO' 
AND (RUNWAYS_UPDATABLE.TORA > 4000 OR LDA > 0) 
AND (TURN_UPDATABLE.AIRLINE_CODE IS NULL OR TURN_UPDATABLE.AIRLINE_CODE = '' 
OR TURN_UPDATABLE.AIRLINE_CODE = '') 

'* ** * ** * ** * ***संपादित स्पष्ट करने के लिए ** * ** * ** * ** * ** * ** यहां दूसरा कथन है कि आंतरिक शामिल मैं उपयोग करना चाहता हूं और मैं इन 2 कथनों को गठबंधन करना चाहता हूं।

SELECT * 
FROM RUNWAYS_UPDATABLE A, RUNWAYS_TABLE B 
WHERE A.RWYKEY = B.RWYKEY 

'* * * अब तक सलाह नीचे ले लिया है, लेकिन हो रही सिंटैक्स त्रुटि के रूप

 SELECT RUNWAYS_UPDATABLE.*, TURN_UPDATABLE.*, AIRPORT_RUNWAYS_SELECTED.* 
    FROM RUNWAYS_UPDATABLE 
     INNER JOIN AIRPORT_RUNWAYS_SELECTED 
      ON RUNWAYS_UPDATABLE.RWYKEY = AIRPORT_RUNWAYS_SELECTED.RWYKEY 
    LEFT JOIN TURN_UPDATABLE 
      ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY 

नोट मैं क्या है: अगर मैं आंतरिक में शामिल होने के बाहर टिप्पणी और बाईं छोड़ शामिल होने के या इसके विपरीत, यह काम करता है लेकिन जब मेरे पास क्वेरी में दोनों शामिल होते हैं, तो जब मैं वाक्यविन्यास त्रुटि प्राप्त कर रहा हूं।

+0

और क्या आप हमें बता सकते हैं कि समस्या क्या है? आप क्या प्राप्त करते हैं और आप क्या उम्मीद करते हैं? – botzko

उत्तर

1

यदि यह केवल एक आंतरिक शामिल है जिसे आप जोड़ना चाहते हैं, तो ऐसा करें। जैसा कि आप एक ही प्रश्न में चाहते हैं उतने जोड़ों को जोड़ सकते हैं। कृपया अपना जवाब अद्यतन करता है, तो यह है कि तुम क्या नहीं करना चाहता है, हालांकि

SELECT * 
    FROM RUNWAYS_UPDATABLE 
    LEFT JOIN TURN_UPDATABLE 
    ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY 
    INNER JOIN table_3 
    ON table_3.rwykey = runways_updatable.rwykey 
    WHERE RUNWAYS_UPDATABLE.ICAO = 'ICAO' 
    AND (RUNWAYS_UPDATABLE.TORA > 4000 OR LDA > 0) 
    AND (TURN_UPDATABLE.AIRLINE_CODE IS NULL OR TURN_UPDATABLE.AIRLINE_CODE = '' 
    OR TURN_UPDATABLE.AIRLINE_CODE = '') 
+0

इसका उत्तर देने का प्रयास करने के लिए धन्यवाद लेकिन आपका उत्तर काम नहीं किया। मुझे एक वाक्यविन्यास त्रुटि मिल रही है: क्वेरी अभिव्यक्ति में अनुपलब्ध ऑपरेटर। – Will

+0

अब जब आप कहते हैं कि यह पहुंच है, तो मैं शर्त लगाता हूं कि यह आपके सेटअप में किसी और चीज़ से आ रहा है। क्या आप उपर्युक्त क्वेरी को सीधे चलाने की कोशिश कर सकते हैं (जैसा लिखा है ... पहुंच से कोई तर्क नहीं), या यह है कि आप क्या कर रहे हैं? –

3

अपने INNER_JOIN से पहले जोड़े अपने LEFT JOIN:

SELECT * 
    FROM runways_updatable ru 
    INNER JOIN table_3 t3 ON ru.rwykey = t3.rwykey 
    LEFT JOIN turn_updatable tu 
     ON ru.rwykey = tu.rwykey 
     AND (tu.airline_code IS NULL OR tu.airline_code = '' OR tu.airline_code = '') 
    WHERE ru.icao = 'ICAO' 
    AND (ru.tora > 4000 OR ru.lda > 0) 

यदि आप LEFT JOIN से पहले table_3 अगर से अपने परिणाम INNER JOIN, तो आप नहीं मिलेगा turn_updatable में कोई मिलान पंक्ति नहीं है। यह संभव है कि आप यही चाहते हैं, लेकिन table_3 के लिए आपकी जुड़ी स्थिति केवल runways_updatable के संदर्भ में है, तो मुझे लगता है कि table_3 से परिणाम प्राप्त करना चाहते हैं, भले ही turn_updatable में कोई मिलान पंक्ति न हो।

संपादित:

के रूप में @ NikolaMarkovinović ने कहा, यदि आप अपने LEFT JOIN हालत में ही शामिल होने में फ़िल्टर करना चाहिए, जैसा कि आप ऊपर देखें। अन्यथा, आपको बाएं तरफ तालिका (runways_updatable) से परिणाम नहीं मिलेगा यदि वह स्थिति दाईं ओर तालिका (turn_updatable) में नहीं मिली है।


संपादित 2: ओपी उल्लेख किया यह वास्तव में पहुँच है, और नहीं MySQL

पहुँच में, शायद यह तालिका उपनाम में एक फर्क है।इसके बजाय इसे आजमाएं:

SELECT [ru].*, [tu].*, [ars].* 
    FROM [runways_updatable] AS [ru] 
    INNER JOIN [airport_runways_selected] AS [ars] ON [ru].rwykey = [ars].rwykey 
    LEFT JOIN [turn_updatable] AS [tu] 
     ON [ru].rwykey = [tu].rwykey 
     AND ([tu].airline_code IS NULL OR [tu].airline_code = '' OR [tu].airline_code = '') 
    WHERE [ru].icao = 'ICAO' 
    AND ([ru].tora > 4000 OR [ru].lda > 0) 
+0

इसका उत्तर देने का प्रयास करने के लिए धन्यवाद लेकिन आपका उत्तर काम नहीं किया। मुझे एक वाक्यविन्यास त्रुटि मिल रही है: क्वेरी अभिव्यक्ति में अनुपलब्ध ऑपरेटर। मैंने टेबल_3 के साथ table_3 को प्रतिस्थापित किया था और उस त्रुटि को प्राप्त किया था – Will

+0

@Will: MySQL का कौन सा संस्करण आप उपयोग कर रहे हैं? मुझे यहां पोस्ट किए गए किसी भी उत्तर में कोई वाक्यविन्यास त्रुटियां नहीं दिखाई दे रही हैं। – Travesty3

+0

मैं एक्सेस का उपयोग कर रहा हूं – Will

1

मुझे सच में यकीन नहीं है कि आप क्या चाहते हैं। लेकिन शायद इस तरह कुछ:

SELECT RUNWAYS_UPDATABLE.*, TURN_UPDATABLE.* 
FROM RUNWAYS_UPDATABLE 
JOIN table_3 
    ON table_3.rwykey = runways_updatable.rwykey 
LEFT JOIN TURN_UPDATABLE 
ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY 
WHERE RUNWAYS_UPDATABLE.ICAO = 'ICAO' 
AND (RUNWAYS_UPDATABLE.TORA > 4000 OR LDA > 0) 
AND (TURN_UPDATABLE.AIRLINE_CODE IS NULL OR TURN_UPDATABLE.AIRLINE_CODE = '' 
OR TURN_UPDATABLE.AIRLINE_CODE = '') 
+0

मेरे प्रश्न का उत्तर देने का प्रयास करने के लिए धन्यवाद, लेकिन मुझे एक त्रुटि मिल रही है: खंड – Will

+0

से वाक्यविन्यास त्रुटि 'चयन *' को 'चयन करें' को बदलने का प्रयास करें। *, TURN_UPDATABLE। * '- त्रुटि तालिका_3 पर डुप्लिकेट कॉलम नामों के कारण हो सकती है । –

+0

अच्छी सूचना। उत्तर अपडेट किया गया – Arion

13

याद रखें कि बाएं जुड़ने में दाएं किनारे वाली तालिका को फ़िल्टर करना स्वयं में शामिल होना चाहिए।

select * 
from table1 
    left join table2 
    on table1.FK_table2 = table2.id 
    and table2.class = 'HIGH' 
+0

+1 बहुत अच्छा बिंदु। – Travesty3

+0

स्पष्टीकरण के लिए, आप यह भी जा सकते हैं: जहां table2.class = 'HIGH' या table2.class शून्य है; –

+2

@robertking नहीं, लौटाई गई पंक्तियों की संख्या अलग हो सकती है क्योंकि 'table2.class' में पहली जगह शून्य हो सकती है। स्थिति में शामिल हों उन्हें फ़िल्टर करेंगे, जबकि स्थिति में उन्हें शामिल किया जाएगा। साथ ही, तालिका तालिका से सभी पंक्तियों को वापस कर दिया जाएगा यदि स्थिति में शामिल होने पर स्थिति का उपयोग किया जाता है, जहां स्थिति तालिका 1 से पंक्तियों को बाहर कर देगी, जिसमें तालिका 2 में समान पंक्ति नहीं है, जहां कक्षा शून्य या कक्षा = 'उच्च' है। –

3

मुझे अंत में यह पता चला। आपकी सभी मदद का धन्यवाद!!!

SELECT * FROM 
(AIRPORT_RUNWAYS_SELECTED 
INNER JOIN RUNWAYS_UPDATABLE 
ON AIRPORT_RUNWAYS_SELECTED.RWYKEY = RUNWAYS_UPDATABLE.RWYKEY) 
LEFT JOIN TURN_UPDATABLE ON RUNWAYS_UPDATABLE.RWYKEY = TURN_UPDATABLE.RWYKEY 
संबंधित मुद्दे

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