MySQL根据不同条件联查不同表的数据if/case

本文探讨了在MySQL中使用IF和CASE语句实现根据不同条件动态联查不同表的方法,以满足复杂业务需求。通过具体示例展示了如何根据产品类型ID选择从device表或monitor表查询设备数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL根据不同条件联查不同表的数据

项目开发中遇到类似的需求。Mybatis 中的< if >标签只能判断where部分,不能满足要求。在网上查解决方法,好像并没有可以完美解决问题的方案,if和case可以从某一种角度实现效果。

if

MySQL中if的用法
IF(expr1,expr2,expr3)
类似三元运算符,判断expr1,如果 expr1 是TRUE,则该语句的返回值为expr2; 否则返回值为 expr3。

SELECT product_id, 
IF(product_type_id=1, (SELECT COUNT(*) FROM `device` WHERE product_id = product.product_id),
					  (SELECT COUNT(*) FROM `monitor`WHERE product_id = product.product_id)) as device_num
FROM `product`
WHERE product_id in (1,25)

查product_id为(1,25)两产品的设备数。product表中字段product_type_id表示产品类型。如果是1就查device表,否则就查monitor表。
在这里插入图片描述

case

多于两种情况时
case的用法
CASE expr1 WHEN a THEN A WHEN … THEN … ELSE … END
判断expr1,满足不同条件时执行不同的语句。

注:最后以END结尾

SELECT product_id,
CASE product_type_id 
WHEN 1 THEN (SELECT COUNT(*) FROM `device` WHERE product_id = product.product_id)
WHEN 2 THEN (SELECT COUNT(*) FROM `monitor`WHERE product_id = product.product_id)
	   ELSE (SELECT COUNT(*) FROM `other_device`WHERE product_id = product.product_id) END as device_num
FROM `product`
WHERE product_id in (1,11,25)

在这里插入图片描述

最后

这样能勉强实现效果,但并不是想象的那种。话说,这种情况是不是应该先查出共同的部分,再在service层进行判断,执行不同的语句。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值