博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql select 作为条件查询,在mysql查询条件where中使用case根据字段条件查询
阅读量:6453 次
发布时间:2019-06-23

本文共 2328 字,大约阅读时间需要 7 分钟。

在使用mysql的时候有时候会遇到,根据字段的不同值产生不同的判断条件,也就是在mysql查询条件where中使用case根据字段条件查询

也许这样说的时候,意思还是表达不清楚,来看个需求吧

我有2个表--

-- 表的结构 `advertiser_category_brand`

--

CREATE TABLE IF NOT EXISTS `advertiser_category_brand` (

`advertiser_id` int(11) NOT NULL COMMENT '广告主id',

`ad_category_id` int(11) NOT NULL COMMENT '分类id',

`ad_brand_id` int(11) NOT NULL COMMENT '品牌id'

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='广告主品类品牌绑定表';

--

-- 转存表中的数据 `advertiser_category_brand`

--

INSERT INTO `advertiser_category_brand` (`advertiser_id`, `ad_category_id`, `ad_brand_id`) VALUES

(32, 33, 0),

(58, 25, 22),

(61, 31, 23),

(63, 41, 34),

(67, 33, 24);--

-- 表的结构 `ad_brand`

--

CREATE TABLE IF NOT EXISTS `ad_brand` (

`ad_brand_id` int(11) NOT NULL COMMENT '广告品牌id',

`ad_brand_name` varchar(40) NOT NULL DEFAULT '' COMMENT '广告品牌名称',

`ad_category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '品牌所属分类id'

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='广告品牌';

--

-- 转存表中的数据 `ad_brand`

--

INSERT INTO `ad_brand` (`ad_brand_id`, `ad_brand_name`, `ad_category_id`) VALUES

(8, '小米手机', 36),

(7, '华为手机', 36),

(6, '海飞丝', 25),

(9, '三星手机', 36),

(10, '苹果手机', 36),

(11, '博朗', 28),

(12, '玉兰油', 29),

(13, '天翼手机', 36),

(14, '一汽大众', 30),

(15, '网易游戏', 31),

(16, '78游戏中心', 31),

(17, 'QQ空间游戏', 31),

(18, '特仑苏', 32),

(19, '唯品会', 33),

(20, '广发银行', 34),

(21, '建设银行', 34),

(22, '力士LUX', 25),

(23, '谷果游戏广告平台', 31),

(24, '大众点评', 35),

(25, '快的', 35),

(26, 'Intel英特尔', 36),

(27, '北联', 38),

(28, 'Mobvista', 31),

(29, '阳狮', 38),

(30, 'Miaozhen', 38),

(31, '品友互动', 41),

(32, '多盟', 39),

(33, 'MediaV', 41),

(34, '舜飞BiddingX', 41),

(35, '测聘网', 42),

(36, 'RTBChina', 41),

(37, 'Ad7', 41),

(38, 'INFIPLAY.RU', 31),

(39, '有爱互动', 31),

(40, '奥奇智慧OKidea', 38);

其中表advertiser_category_brand中如果ad_brand_id字段值为0则表示ad_category_id下的所有ad_brand_id都关联了

查询SQL如下 注意case end用括号包含起来,不然会出错SELECT advertiser_category_brand.advertiser_id,GROUP_CONCAT(ad_brand.ad_brand_name) as brandname

FROM advertiser_category_brand LEFT JOIN ad_brand ON(advertiser_category_brand.ad_category_id = ad_brand.ad_category_id )

WHERE (CASE WHEN advertiser_category_brand.ad_brand_id>0 THEN advertiser_category_brand.ad_brand_id=ad_brand.ad_brand_id ELSE TRUE END)

GROUP BY advertiser_category_brand.advertiser_id

当然还有一个数据库的解决办法,就是advertiser_category_brand表中ad_brand_id不要存储0,全部都存储有关联的值,这样解决应该会比较好,但因为较多的地方使用了该数据库,如果改动存储方式,前端也需要更改,懒人办法.

转载地址:http://djyzo.baihongyu.com/

你可能感兴趣的文章
第十届蓝桥杯B组C++题目详解和题型总结
查看>>
树的存储结构2 - 数据结构和算法42
查看>>
简单理解函数回调——同步回调与异步回调
查看>>
Android 多个Activity 跳转及传参
查看>>
anroid 广播
查看>>
AJAX POST&跨域 解决方案 - CORS
查看>>
关于最小生成树中的kruskal算法中判断两个点是否在同一个连通分量的方法总结...
查看>>
【译】Linux系统和性能监控(4)
查看>>
开篇,博客的申请理由
查看>>
点滴积累【C#】---C#实现上传word以流形式保存到数据库和读取数据库中的word文件。...
查看>>
Ubuntu常用笔记
查看>>
Token和session 详解
查看>>
JMeter IP欺骗压测
查看>>
Serializers 序列化组件
查看>>
最简单的RPC框架实现
查看>>
Servlet 技术全总结 (已完成,不定期增加内容)
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
CountDownLatch与thread-join()的区别
查看>>
linux下MySQL安装登录及操作
查看>>
centos 7 部署LDAP服务
查看>>