2016-11-28 98 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

相关问题