2016-11-28 95 views
1

我有兩個表顯示名稱從一個表不同的ID 2

tb_masteropsi

id, type, name 
1, Job, Painter 
2, Job, Singer 
3, Use, Kanvas 
4, Use, Guitar 
5, Use, Microphone 

tb_employee

id, name, job, use 
1, Jhon, 1, 3 
2, Mark, 2, 4 
3, Tom, 2, 5 

我使用這個查詢顯然不會工作

select 
    a.*, 
    b.* 
from tb_employee a 
    join tb_masteropsi b 
    on a.job = b.id and a.use = b.id; 

我的目標是得到以下結果

id, name, job, use 
1, Jhon, Painter, Kanvas 
2, Mark, Singer, Guitar 
3, Tom, Singer, Microphone 

我怎樣才能解決呢?

+0

現在,你意識到你需要加入到表無論如何兩次,這是修復這個安全漏洞在您的設計時間:創建'jobs'兩個獨立的表和'uses',這時你可以刪除現在多餘的'type'列。 – onedaywhen

回答

1

您必須兩次加入tb_employee表,才能從該表中獲取兩個不同的行(一次用於「作業」,一次用於tb_employee表的「使用」列)。

因此,你需要這樣的事情來實現預期結果

SELECT 
    te.`id`, 
    te.`name`, 
    tm1.`name` as 'job', 
    tm2.`name` as 'use' 
FROM `tb_employee` te 
    LEFT JOIN `tb_masteropsi` tm1 
    ON tm1.`id`=te.`job` 
    LEFT JOIN `tb_masteropsi` tm2 
    ON tm2.`id`=te.`use` 
; 

注:請考慮分拆tb_masteropsi表分成兩個獨立的表 - 一個是「工作」,一個針對「使用」。

Navicat的測試預覽:

enter image description here

+0

謝謝你,真的有幫助:) – hooman182

相關問題