2014-06-28 60 views
0

我有一個查詢,如下所示:這個MySQL查詢有什麼問題(格式化左連接)?

SELECT 
staff_names.staff_ID AS sid 
staff_names.name AS name, 
staff_names.rec_type AS rec_type, 
prod_staff.specialized AS specialized, 
compspec.name AS compspec_name 
FROM staff_names JOIN prod_staff USING (staff_ID) 
LEFT JOIN (prod_staff_compspec JOIN company_list USING (comp_ID)) compspec 
USING (prod_ID, staff_ID, role_ID) 
WHERE prod_staff.role_ID = 2 
AND prod_staff.prod_ID = 27 
AND prod_staff.asst = 'n' 
AND episode IS NOT NULL 
ORDER BY name 

運行本作,是說,有附近的「compspec」別名錯誤。刪除它並在SELECT子句中將'compspec'更改爲'company_list'將不返回任何行,儘管它應該返回1給定的值。左連接似乎是問題,但我不怎麼應該格式化。

prod_staff表具有prod_ID,staff_ID和role_ID字段。 prod_staff_compspec有這些和一個comp_ID字段。 prod_staff可能有或沒有匹配的prod_staff_compspec行,但prod_staff_compspec始終有匹配的company_list行。

我想要做的是檢索與prod_staff表中給定的role_ID和prod_ID關聯的所有員工姓名列表,以及company_list表中的公司名稱,如果prod_staff_compspec表中存在此類鏈接(只有少數人有一個)。

回答

0

切換到ON來定義表格關係。 LEFT JOIN (prod_staff_compspec JOIN company_list USING (comp_ID)) compspec切換爲2 left join

select a.staff_id sid, a.name, a.rec_type, b.specialized, d.name compspec_name 
from staff_names a 
join prod_staff b on a.staff_id = b.staff_id 
left join prod_staff_compspec c on b.prod_id = c.prod_id and b.staff_id = c.staff_id and b.role_id = c.role_id 
left join company_list d on c.comp_id = d.comp_id 
where b.role_id = 2 and b.prod_id = 27 and b.asst = 'n' and episode is not null 
order by a.name;