2013-03-11 67 views
1

假如我有這樣一個查詢:遞歸查詢並更改目標表根據結果

SELECT type_person FROM tbl_event WHERE id_animal = 1; 

這給了我的人的類型和目標表中加入(在這種情況下,這將返回「工人」)從其他表獲得事件的整個數據,做一個馬上加入我知道我必須做的像「員表」聯接:

SELECT a.*,b.*,z.* 
FROM tbl_event a 
     left JOIN tbl_worker b 
      ON a.type_person = b.type_person 
     left JOIN tbl_animal z 
      ON z.id_animal = a.id_animal 
     WHERE z.id_animal = 1; 

有沒有辦法來改變部分LEFT JOIN tbl_worker b通過類似的東西:

SELECT a.*,b.*,z.* 
FROM tbl_event a 
     left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1) 
      ON a.type_person = b.type_person 
     left JOIN tbl_animal z 
      ON z.id_animal = a.id_animal 
     WHERE z.id_animal = 1; 

here is a fiddle

回答

1

當然,你需要做的是這樣的:

SELECT a.*,b.*,z.* 
FROM tbl_event a 
     left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1) as b 
      ON a.type_person = b.type_person 
     left JOIN tbl_animal z 
      ON z.id_animal = a.id_animal 
     WHERE z.id_animal = 1; 

基本上你缺少的別名(b在這種情況下)

Here's an updated fiddle

1
當然

您可以 。你的意思是這樣的

SELECT a.*,b.*,z.* 
FROM tbl_event a 
    left JOIN (SELECT type_person FROM tbl_event WHERE id_animal = 1) b 
     ON a.type_person = b.type_person 
    left JOIN tbl_animal z 
     ON z.id_animal = a.id_animal 
    where z.id_animal = 1; 

DEMO

在查詢

你忘記了做AS b