2015-04-05 49 views
0

選擇數據我在MySQL三個表:MySQL的:在三個表

1.t_item 
    itemID item_name  
     1  pen  
     2  luxury pen  


2.s_item 
     itemID item_name  
     1   shoes 
     2   clothes 
     3   computer 


3.track 
     trackID item_no item_type 
     1   1   t_item 
     2   2   t_item 
     3   2   s_item 

而且我想要得到的TrackID,項目名稱爲ITEM_NO表軌道。 如何編寫sql語句?在跟蹤中,trackID 2,3具有相同的item_no但不同的項目類型,我可以使用join嗎?

回答

0

給你:

(SELECT track.trackID, t_item.item_name FROM track 
    LEFT JOIN t_item ON track.item_no=t_item.itemID 
    WHERE track.item_type = 't_item') 
UNION 
(SELECT track.trackID, s_item.item_name FROM track 
    LEFT JOIN s_item ON track.item_no=s_item.itemID 
    WHERE track.item_type = 's_item') 
+0

謝謝您的解答。這是工作。 – paul0080 2015-04-05 18:41:26

+1

您也可以在不使用'聯合'的情況下以單個語句獲取它。 – Beginner 2015-04-05 18:45:25

0

在這裏你去,這將工作:

(SELECT t.trackID,ti.item_name 
    FROM track t 
    LEFT JOIN t_item ti 
    ON t.item_no=ti.itemID AND t.item_type='t_item') 
UNION 
(SELECT t.trackID,si.item_name 
    FROM track t 
    LEFT JOIN s_item si 
    ON t.item_no=si.itemID AND t.item_type='s_item') 
0

是的,你可以使用JOIN這樣的:

SELECT t.trackID, t.item_no, 
    (CASE WHEN t.item_type = 't_item' THEN ti.item_name 
     WHEN t.item_type = 's_item' THEN si.item_name 
    END) AS item_name 
FROM track t 
    LEFT JOIN t_item ti ON t.item_no = ti.itemID AND t.item_type = 't_item' 
    LEFT JOIN s_item si ON t.item_no = si.itemID AND t.item_type = 's_item'; 

這裏是sqlfiddle