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

有一下三张表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

问一下高手们,上面的查询语句该怎么样让写呢?在线等

解决方案

20

有一下三张表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的效率比较低

20

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 根据一个表的字段值不同关联查询两张不同的表!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值