问题:
a表得字段deviceType有1,2,3三个值,为1时查询b表,为2时查询c表,为3时查询d表:
将三个表关联起来再做判断:
select a.*,
(case when a.deviceType = 1 then b.name when a.deviceType = 2 then c.name else d.name end) as device_name,
(case when a.device_type = 1 then b.number when a.device_type = 2 then c.number else d.number end) as device_number
from a left join b on a.device_id = b.id
left join c on a.device_id = c.id
left join d on a.device_id = d.id
Mysql的三个条件判断:IF()、IFNULL()与CASE。
1.IF(expr,v1,v2)
若expr是TRUE(即:expr <> 0 and expr <> NULL),则该函数返回值为v1,否则返回值为v2
2.IFNULL(v1,v2)判断v1,v2是否为空
两个都不为空返回v1,
v1为空返回v2
v1不为空,v2为空返回v1
3.case
case expr when v1 then r1 when v2 then r2 else r3 end;
当expr满足v1就返回r1,若满足v2就返回r2,否则返回r3
case when expr then r1 when expr2 then r2 else r3 end
当expr为true就返回r1,当expr2为true就返回r2,否则就返回r3
本文详细介绍了如何在SQL中使用多表关联查询,并结合设备类型动态选择不同表进行数据检索的方法。同时,深入解析了MySQL中IF()、IFNULL()及CASE语句的用法,帮助读者掌握复杂条件下的数据筛选技巧。
5313

被折叠的 条评论
为什么被折叠?



