2012-03-24 14 views
127

मेरे पास 4 अलग-अलग टेबल हैं जिन्हें मैं शामिल करना चाहता हूं। इस प्रकार टेबल कॉलम के साथ संरचित कर रहे:आईडी का उपयोग करके मैं एकाधिक SQL तालिकाओं में कैसे शामिल हो सकता हूं?

TableA - aID | nameA | dID 

TableB - bID | nameB | cID | aID 

TableC - cID | nameC | date 

TableD - dID | nameD 

तालिका A के साथ शुरू, मैं समझता हूँ टेबल एक और सी बी का उपयोग कर में कैसे शामिल हों, क्योंकि ख उन तालिकाओं के लिए प्राथमिक कुंजी है। मैं टेबलए पर टेबल टेबलडी में भी शामिल होना चाहता हूं। नीचे मेरी एसक्यूएल बयान है कि पहले टेबल ए और बी में शामिल है, तो मिलती है कि सी के लिए:

SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA 
ON TableB.aID= TableA.aID) 
INNER JOIN TableC ON(TableB.cID= Tablec.cID) 
WHERE (DATE(TableC.date)=date(now())) 

जब मैं एक और शामिल होने को जोड़ने के लिए, डी शामिल करने के लिए प्रयास करते हैं, मैं एक त्रुटि है कि 'रखा' अज्ञात है मिलती है:

SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA 
    ON TableB.aID= TableA.aID) 
    INNER JOIN TableC ON(TableB.cID= Tablec.cID) 
    INNER JOIN TableA ta ON(ta.dID= TableD.dID) 
    WHERE (DATE(TableC.date)=date(now())) 

उत्तर

268

आप इस तरह के और अधिक कुछ चाहते हैं। आपको बस इतना करना है कि आपने पहले ऐसा किया है जैसा कि आपने पहले किया है।

एक नोट: आप देखेंगे कि मैंने आपके कई कोष्ठक हटा दिए हैं, क्योंकि वास्तव में आपके पास उनके अधिकांश मामलों में आवश्यक नहीं है, और कोड पढ़ने की कोशिश करते समय केवल भ्रम जोड़ें। उचित घोंसला आपके कोड को पठनीय और अलग करने का सबसे अच्छा तरीका है।

+2

tableN चयन नहीं होगा। * मिलान करने वाले सभी प्राथमिक कुंजी आईडी स्तंभ लेबल में की नकल? (प्रश्न यह निर्दिष्ट नहीं करता कि आउटपुट क्या वांछित है लेकिन आम तौर पर आप ऐसा नहीं करना चाहते हैं मुझे लगता है) –

+2

शायद मैं पूछूं कि 'जॉइनटेबल सी' '' '' '' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ = TableA.cID'। मुझे लगता है कि हम अन्य 3 टेबलों में 'टेबलए' में शामिल हो रहे हैं। – emihir0

4

आपने टेबल में शामिल नहीं किया है केवल टेबल में से किसी एक से फ़ील्ड टेबल का चयन किया है।

SELECT TableA.*, TableB.*, TableC.*, TableD.* 
FROM TableA 
    JOIN TableB 
     ON TableB.aID = TableA.aID 
    JOIN TableC 
     ON TableC.cID = TableB.cID 
    JOIN TableD 
     ON TableD.dID = TableA.dID 
WHERE DATE(TableC.date)=date(now()) 

अपने उदाहरण में, आप वास्तव में TableD सहित नहीं हैं:

20
SELECT 
    a.nameA, /* TableA.nameA */ 
    d.nameD /* TableD.nameD */ 
FROM TableA a 
    INNER JOIN TableB b on b.aID = a.aID 
    INNER JOIN TableC c on c.cID = b.cID 
    INNER JOIN TableD d on d.dID = a.dID 
WHERE DATE(c.`date`) = CURDATE() 
1

सरल अंदरूनी शामिल हों देखें कोड ....

CREATE VIEW room_view 
AS SELECT a.*,b.* 
FROM j4_booking a INNER JOIN j4_scheduling b 
on a.room_id = b.room_id; 
+0

ओपी की तालिका संरचना का उपयोग नहीं कर रहा है? –

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

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