mysql 根据一个表的字段值不同关联查询两张不同的表

lxl_h 2016-05-10 11:10:41
有一下三张表A,B,C,A.type=0时,target_id为B.id;A.type=1时,target_id为C.id
A表
id type target_id
1 1 1
2 0 1
3 1 2
4 0 2
_________
B表
id b_name
1 b_name1
2 b_name2
_____________
C表
id c_name
1 c_name1
2 c_name2
_________

需求是:查询条件是name,查出B.b_name 或者C.c_name like ‘%name%’ 的记录,结果字段是A.id,name
例如以上表,如果查询name1 ,结果如下
A.id name
1 c_name1
2 b_name1

请问大神们,上面的查询语句该如何让写呢?在线等
...全文
3768 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxl_h 2016-05-10
  • 打赏
  • 举报
回复
自己顶一下,求大神们帮帮忙
致命的西瓜 2016-05-10
  • 打赏
  • 举报
回复
select a.id,(CASE WHEN a.type = 0 THEN b.name else c.name END) from a left join b on a.target_id=b.id left join c on a.target_id=c.id 试试速度,也可以吧case when 用在join 的时候拼接sql
allen519 2016-05-10
  • 打赏
  • 举报
回复
有一下三张表A,B,C,A.type=0时,target_id为B.id;A.type=1时,target_id为C.id A表 id type target_id 1 1 1 2 0 1 3 1 2 4 0 2 _________ B表 id b_name 1 b_name1 2 b_name2 _____________ C表 id c_name 1 c_name1 2 c_name2 _________ 我只是随便写写,更好的 一定在其他人 那里 select a.id,b.name from a join b on a.target_id=b.id where a.type=0 union select a.id,c.name from a join c on a.target_id=c.id where a.type=1 不太明白lz 这个逻辑是用在什么地方, sql 实现时没有问题,总感觉 这个要是太多,sql的效率比较低

56,942

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧