SQL SERVER一条语句查询公用属性的数据简单处理

有那么一个小的需求,我现在有一张产品表,那么业务部门需要让我们进行一个统计:
他告诉了我们“我们需要一张拥有我指定的同样配置的产品列表!”
话音刚落,苦逼的我们程序员就要开始执行任务啦!
其实业务场景很简单,写这个小文章只是为了让有同样需求的同学们少走弯路,特此记录了下来。
表结构:(我利用临时表)

IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name LIKE '%#ProductPropertyInfo%' and TYPE='U')
DROP TABLE #ProductInfo

IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name LIKE '%#ProductPropertyInfo%' and TYPE='U')
DROP TABLE #ProductPropertyInfo

CREATE TABLE #ProductInfo(
[产品ID] [int] NULL,
[产品名称] nvarchar(50) NULL,
[产品型号] nvarchar(50) NULL
)

CREATE TABLE #ProductPropertyInfo(
[产品ID] [int] NULL,
[属性配置] nvarchar(50) NULL
)

插入临时数据
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(1,'长城汽车','C50');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(2,'长城汽车','C30');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(3,'长城汽车','H5');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(4,'长城汽车','H6');

INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(5,'奥迪汽车','A4');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(6,'奥迪汽车','A6');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(7,'奥迪汽车','A8');
INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(8,'奥迪汽车','A3');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'涡轮增压');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(2,'天窗');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'涡轮增压');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'天窗');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'涡轮增压');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'精英轮毂');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'GPS');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'涡轮增压');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'电加热座椅');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'自动泊车');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'涡轮增压');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'自动泊车');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'涡轮增压');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'精英轮毂');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'GPS');

INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'自动泊车');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'电加热座椅');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'天窗');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'涡轮增压');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'精英轮毂');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'防弹玻璃');
INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'GPS');

查看数据效果:

QQ图片20150907132019.png

从模拟数据上可以直观的看到我们所要查询的数据,我们要根据配置来选车,根据我们想要的功能来查看有那款车子符合我的需求:
语句:(假设我目前需要拥有:“精英轮毂”和“GPS”功能特性的车子)

SELECT * FROM #ProductInfo p INNER JOIN (
SELECT
[产品ID]
FROM #ProductPropertyInfo WHERE [属性配置] IN ('精英轮毂','GPS')
GROUP BY [产品ID] HAVING(COUNT(DISTINCT [属性配置]) > 1)) y ON p.[产品ID] = y.[产品ID]

查询特性的语句完全取决于:[属性配置] IN ('精英轮毂','GPS') 想要什么配置就有什么配置啦!
本文章只作为基础SQL语句的功能实现部分,如果有更好的方式也可以一起交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容