2012-11-09 19 views
9

मैं तीन टेबल इस तरह है के साथ तीन टेबल पर क्वेरी में शामिल होने:Mysql एकाधिक स्तंभों

विशेषज्ञता

sid | s_name 
-------------- 
1 | test 1 
2 | test 2 

व्यक्ति

pid | name | sid 
------------------ 
1 | ABC | 1 
2 | XYZ | 2 

समय

tid | time_from | time_to | pid 
---------------------------------- 
1 | 08:00:00 | 10:00:00 | 1 
2 | 20:00:00 | 22:00:00 | 1 
3 | 09:00:00 | 14:00:00 | 2 
4 | 19:00:00 | 20:00:00 | 2 

** मैं इस तरह परिणाम कुछ प्राप्त करना चाहते हैं *

pid | name | s_name | time_from | time_to 
-------------------------------------------- 
1 | ABC | test 1 | 08:00:00 | 10:00:00 

विवरण:
सभी तीन टेबल जुड़े हुए हैं।
मैं सभी रिकॉर्ड चाहते हैं, जहां
विशेषज्ञता आईडी = '1'
व्यक्ति नाम की तरह 'एबीसी'
समय में है '08 के बीच: 00 'और '10: 00 00: 00 '।

मैंने mysql जुड़ने के कई संयोजनों की कोशिश की लेकिन डेटा को सही तरीके से लाने में सक्षम नहीं है।

+0

डेटा समय 'time_from' और' time_to' क्या है? –

उत्तर

19

आप इस के लिए INNER JOIN उपयोग कर सकते हैं,

SELECT a.pid, a.name, 
     b.sname, 
     c.time_from, 
     c.time_to 
FROM person a 
     INNER JOIN specialisation b 
      ON a.sid = b.sid 
     INNER JOIN Timing c 
      ON a.pid = c.pid 
WHERE a.sid = 1 and 
     a.name='ABC' AND 
     c.time_from >= '08:00:00' AND c.time_to <= '10:00:00' 
+0

आपके कोड और खान के बीच क्या अंतर है? – AnandPhadke

+0

@ अन्ंदपढ़के वे दोनों एक ही प्रदर्शन करते हैं क्योंकि हम दोनों 'इनर जॉइन' का उपयोग कर रहे हैं। –

+1

धन्यवाद। आपने मेरे बहुमूल्य समय को बचाया। :) –

0

यह एक सीधे आगे JOIN साथ उचित WHERE शर्त है।

SELECT t.pid, p.name, s.s_name, t.time_from, t.time_to 
FROM Timing AS t 
JOIN Person AS p ON p.pid = t.pid 
JOIN Specialisation AS s ON s.sid = p.sid 
WHERE s.sid = 1 
    AND t.time_from >= 08:00:00 AND t.time_to <= 10:00:00 

यह एक साधारण स्थिति है, जिसमें आप डेटा इस तरह से लाने के लिए JOIN रों उपयोग करने के लिए है। यह इतना आसान है कि आप अपने पहले उपयोग के बाद इसे लटका लेंगे। यह प्रश्न हो सकता है और उत्तर आपको समझने में मदद करेंगे।

+0

क्यों डाउनवोट? : ओ। यदि सही उत्तर नहीं है, तो क्या यह मार्गदर्शिका ओपी को सही दिशा में नहीं है? और बहुत सारे जवाब जो बाद में आया उसी कोड कोड का उपयोग करता है! – nawfal

0
SELECT p.pid, p.name, s.s_name, t.time_from, t.time_to 
FROM Timing AS t 
JOIN Person AS p ON p.pid = t.pid 
JOIN specialisation AS s ON s.sid = p.sid 
WHERE s.sid = 1 and p.name='ABC' 
AND t.time_from >= '08:00:00' AND t.time_to <= '10:00:00' 
+2

'pid' इस – gks

+0

Thangs-धन्यवाद उपयोग उर्फ ​​चयन करने के लिए अस्पष्ट हो जाएगा – AnandPhadke

+0

आप @AnandPhadke – gks

1

आप सरल उपयोग कर सकते हैं की तरह इस

 Select P.pid , name , s_name ,time_from , 
    time_to from Specialisation S 
    Join Person P on P.sid=S.sid 
    Join Timing T on T.pid= P.pid 
    where T.time_from >= '08:00:00' AND T.time_to <='10:00:00' And P.name='ABC'; 

Fiddle

+0

एसक्यूएल सिंटेक्स त्रुटि स्वागत कर रहे हैं बाहर poining के लिए @AnandPhadke –

0
SELECT B.PID pid, B.NAME name, A.SNAME s_name, C.TIME_FROM time_from, C.TIME_TO time_to 
FROM SPECIALISATION A, PERSON B, TIMING C 
WHERE A.SID = 1 AND A.SID=B.SID AND B.PID=C.PID 
AND C.TIME_FROM >=08:00:00 AND C.TIME_TO <=10.00.00 
0

प्रयास में शामिल हों:

SELECT t.pid, p.name, s.s_name, t.time_from, t.time_to 
    FROM Specialisation AS s 
    left join Person AS p ON p.sid = s.sid 
    left join Timing AS t ON t.pid = p.pid 
    WHERE s.sid = 1 
     AND t.time_from >= 08:00:00' AND t.time_to <= 10:00:00 
group by t.tid 
संबंधित मुद्दे