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

MySql 码拜 9年前 (2016-02-06) 3249次浏览
有一下三张表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 根据一个表的字段值不同关联查询两张不同的表
喜欢 (0)
[1034331897@qq.com]
分享 (0)