有一下三张表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
问一下高手们,上面的查询语句该怎么样让写呢?在线等
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的效率比较低
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
left join b on a.target_id=b.id
left join c on a.target_id=c.id
试试速度,也可以吧case when 用在join 的时候拼接sql