2011-08-09 114 views
1

上面是我的查询...但observer_ID和staff_ID的对应名称位于另一个名为staff的表中。所以一些我需要加入(o.observer_ID = s.staff_ID)和(o.staff_ID = s.staff_ID)来获得观察者和被观察者的两个名字(o.staff_ID)。请帮助我。由于加入MYSQL查询问题

SELECT DISTINCT o.Room, o.Date,o.Module_code,o.observer_ID,o.staff_ID,o.form_id 
FROM mbm2_db.observation_details as o,mbm2_db.Staff as s 
WHERE o.date = '2011-08-09' and o.Module_code = 'IS5103' 

回答

1
SELECT DISTINCT 
    o.Room, o.Date,o.Module_code,o.observer_ID,o.staff_ID,o.form_id, 
    s1.name, s2.name 
FROM 
    mbm2_db.observation_details AS o 
    LEFT JOIN mbm2_db.Staff AS s1 ON o.observer_ID = s1.staff_ID 
    LEFT JOIN mbm2_db.Staff AS s2 ON o.staff_ID = s2.staff_ID 
WHERE 
    o.date = '2011-08-09' AND o.Module_code = 'IS5103' 
0

也许内自连接:

SELECT DISTINCT o.Room, o.Date,o.Module_code, o.observer_ID, o.staff_ID, o.form_id 
FROM mbm2_db.observation_details As o 
JOIN mbm2_db.Staff As s ON o.staff_ID = s.staff_ID 
JOIN mbm2_db.Staff As b ON b.observer_ID = s.staff_ID 
WHERE o.date = '2011-08-09' and o.Module_code = 'IS5103'; 
0
SELECT DISTINCT o.Room, o.Date,o.Module_code,o.observer_ID,o.staff_ID,o.form_id 
FROM mbm2_db.observation_details o, mbm2_db.Staff s 
WHERE o.date = '2011-08-09' 
    AND o.Module_code = 'IS5103' 
    AND o.staff_ID=s.staff_ID 
    AND o.observer_ID=s.staff_ID 
+0

你可以简化为'o.staff_ID = o.observer_ID',它永远不会是真的,因此0记录。 – JMichelB

0
SELECT DISTINCT o.Room, o.Date, o.Module_code, o.observer_ID, o.staff_ID, o.form_id 
FROM (mbm2_db.observation_details AS o LEFT JOIN mbm2_db.Staff AS observer ON o.observer_ID = oberver.staff_ID) 
    LEFT JOIN mbm2_db.Staff AS observed ON o.staff_ID = observed.staff_ID 
WHERE o.date = '2011-08-09' and o.Module_code = 'IS5103' 

告诉我,如果它的工作原理(和手动检查一些值)。