case when分栏,不同情况查询不同的表

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:08   3270   0

我们有时候查询的时候需要很据表某一字段的状态位去判断需要查询那张表的内容。

正如我现在遇到的问题一样,我有一张评价内容表,里面有一个字段标识了这个评价针对的内容(评价可以针对一件商品或者一张图片或者是一条分享)


我把这个问题抽离出来就变成了这样


查询A表内容,A状态位有两种状态,当状态位(A.state)为0的时候,我要去查找B表的content和picture;当状态位(A.state)为1的时候,我要去查找C表的content和picture。

这样很容易让人联想到 if 这个判断逻辑,但是假如用先查出A表中的内容,遍历A表中的记录,根据状态去找B表或C表的content,picture


这样处理数据会感到很麻烦,不过同样也可以办到。但是怎么才能在一条SQL中做到呢?


case when的方法可以很好的处理这样的问题

这是表的数据结构

SELECT a.id,a.to_id,a.state,
CASE
WHEN a.state = 0 THEN (SELECT b.picture FROM B AS b WHERE a.to_id=b.id)
WHEN a.state = 1 THEN (SELECT c.picture FROM C AS c WHERE a.to_id=c.id)
END AS picture,
CASE
WHEN a.state = 0 THEN (SELECT b.`content` FROM B AS b WHERE a.to_id=b.id)
WHEN a.state = 1 THEN (SELECT c.`content` FROM C AS c WHERE a.to_id=c.id)
END AS content
FROM A AS a



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP