webentwicklung-frage-antwort-db.com.de

Mysql-Join-Abfrage für drei Tabellen mit mehreren Spalten

Ich habe drei Tabellen wie diese:

Spezialisierung

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

Person

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

Zeitliche Koordinierung

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

** Ich möchte so etwas wie das Ergebnis *

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

Beschreibung:
Alle drei Tabellen sind miteinander verbunden.
Ich möchte alle Aufzeichnungen wo
Spezialisierung id = '1'
Person Name wie 'ABC'
timing liegt zwischen '08: 00: 00 'und '10: 00: 00'. 

Ich habe mehrere Kombinationen von Mysql-Joins ausprobiert, konnte die Daten jedoch nicht korrekt abrufen. 

10
Murtaza Malek

Sie können INNER JOIN dafür verwenden,

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'
20
John Woo

Sie können Simple Join so verwenden

     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

1
gks

Dies ist eine einfache JOIN mit der entsprechenden WHERE-Bedingung.

 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

Dies ist eine einfache Bedingung, bei der Sie JOINs verwenden müssen, um Daten auf diese Weise abzurufen. Es ist so einfach, dass Sie gleich nach dem ersten Gebrauch einen Eindruck davon bekommen. Vielleicht ist diese Frage und Antworten werden Ihnen helfen, sie zu verstehen.

0
nawfal
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'
0
AnandPhadke
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
Shamis Shukoor

Versuchen :

    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 
0
Bajrang