Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从一个不同id的表中显示两个名称_Mysql_Join - Fatal编程技术网

Mysql 从一个不同id的表中显示两个名称

Mysql 从一个不同id的表中显示两个名称,mysql,join,Mysql,Join,我有两张桌子 tb_masteropsi id, type, name 1, Job, Painter 2, Job, Singer 3, Use, Kanvas 4, Use, Guitar 5, Use, Microphone tb\U员工 id, name, job, use 1, Jhon, 1, 3 2, Mark, 2, 4 3, Tom, 2, 5 我使用的这个查询显然不起作用 select a.*, b.* from tb_

我有两张桌子

tb_masteropsi

id, type, name  
1, Job, Painter  
2, Job, Singer  
3, Use, Kanvas  
4, Use, Guitar  
5, Use, Microphone
tb\U员工

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  

如何修复它?

您必须加入
tb\u employee
表两次,才能从该表中获得两个不同的行(一次用于
tb\u employee
表的'job'列,一次用于'use'列)

所以你需要这样的东西才能达到预期的效果

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`
;

<强>注:请考虑将<代码> TBJMasopopsie/Cudio>表分成两个单独的表,一个是“作业”,一个是“使用”。 Navicat测试预览:


既然您意识到无论如何都需要两次连接到表,现在是修复设计中缺陷的时候了:分别为
作业
使用
创建两个单独的表,此时您可以删除现在冗余的
类型
列。