MYSQL 三张表查询

比如a表ID———12345——B表IDa ---bcode——————1 , asdad3 , cdgge5 , wdw——C表IDb , ccode————————2 , ojoj4 , asdad5 , cdgge——————怎么样能让查询结果————————————ID , aa ,bb , ab————————-————1 -- ---,a-----------------a2 ---------------,b--------b3 ----- ,a-----------------a4-----------------b--------b5 -----,a--------,b-------ab——————————解释一下查询结果 就是想, 以A表为列, 匹配B表有ID相同的 就单独成aa列也就是 case when(a.id = b.id) then ✀a✀ end as aabb列也是 同理,ab列就是concat(aa,bb)了三张表实现这样的语句应该怎么写呢,请指点而且在MYSQL下 数据大概1万条的时候根本无效率可言。。应该怎么办才能又有效率有准确的多表查询其实 最想得到的结果是————————————ID , ab————————-————1 -- ---, a2 -------b3 ----- ,a4--------b5 -----,ab——————————以A为查询基准, 匹配B 和C表, 结果显示在 AB列, 三种状态: 和B有相同ID的 显示为a, 和C表有相同ID的显示为b, A, B ,C三个表中 有相同ID的 显示为ab 求解答,谢谢
2026年09月28日 22:35
有3个网友回答
网友(1):

SELECT aaa.id, REPLACE(bbb.bcode, bbb.bcode, 'a') aa, REPLACE(ccc.ccode, ccc.ccode, 'b') bb, concat_ws( '', REPLACE(bbb.bcode, bbb.bcode, 'a'), REPLACE(ccc.ccode, ccc.ccode, 'b')) ab FROM a aaa left Join b bbb ON ( aaa.id = bbb.ida ) left Join c ccc ON ( aaa.id = ccc.idb ) ORDER BY aaa.id ASC

我专门建了跟你一模一样的表,测试过了,出来的结果也跟你要的一模一样。

你最想要的结果:

SELECT aaa.id, concat_ws( '', REPLACE(bbb.bcode, bbb.bcode, 'a'), REPLACE(ccc.ccode, ccc.ccode, 'b')) ab FROM a aaa left Join b bbb ON ( aaa.id = bbb.ida ) left Join c ccc ON ( aaa.id = ccc.idb ) ORDER BY aaa.id ASC

网友(2):

select a.ID,concat(b.bcode,c.ccode) from a left join b on (a.ID=b.IDa) left join c on (a.ID=c.IDb) order by a.ID;

如果三张表的ID字段名都叫ID的话,join 后面可以用using (ID)就可以了
select a.ID,concat(b.bcode,c.ccode) from a left join b on using (ID) left join c on using (ID) order by a.ID;

---------------
抱歉,以上错了,如果C表里有的ID,在B表里没有则不会被输出。
目前最好的方法是创建临时表,将A,B表整合后的结果输入临时表,然后在将临时表和C表进行数据整合。

网友(3):

你试试不用 语法构造,直接建立同类型(项目)关联,然后再查找。看看可不可行