利用SQL进行推理
数据库环境:SQL SERVER 2008R2
有如下需求:
Baker 不住顶层。Cooper不住底层。
Fletcher 既不住顶层也不住底层。Miller住得比Cooper高。
Smith住的楼层和Fletcher不相邻。
Fletcher住的楼层和Cooper不相邻。
用SQL写出来
--准备基础数据,用A、B、C、D、E分别表示Baker, Cooper, Fletcher, Miller and Smith
CREATE TABLE ttb
(
subname VARCHAR(1) ,
realname VARCHAR(10)
)
INSERT INTO ttb
VALUES ( 'A', 'Baker' ),
( 'B', 'Cooper' ),
( 'C', 'Fletcher' ),
( 'D', 'Miller' ),
( 'E', 'Smith' )
2.生成所有可能情况的排列组合
--生成A、B、C、D、E所有的排列组合
WITH x0
AS ( SELECT CONVERT(VARCHAR(10), 'A') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'B') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'C') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'D') AS hid
UNION ALL
SELECT CONVERT(VARCHAR(10), 'E') AS hid
),
x1
AS ( SELECT hid
FROM x0
WHERE LEN(hid) <= 5
UNION ALL
SELECT CONVERT(VARCHAR(10), a.hid + b.hid) AS hid
FROM x0 a
INNER JOIN x1 b ON CHARINDEX(a.hid, b.hid, 1) = 0
)
SELECT hid AS name
INTO #tt
FROM x1
WHERE LEN(hid) = 5
ORDER BY hid
3.加入条件,找出满足要求的楼层安排
WITH x2
AS ( SELECT name
FROM #tt
WHERE SUBSTRING(name, 5, 1) <> 'A'--Baker 不住顶层
AND SUBSTRING(name, 1, 1) <> 'B'--Cooper不住底层
AND ( SUBSTRING(name, 1, 1) <> 'C'
AND SUBSTRING(name, 5, 1) <> 'C'--Fletcher 既不住顶层也不住底层
)
AND name LIKE '%B%D%'--Miller住得比Cooper高
AND name NOT LIKE '%CE%' AND name NOT LIKE '%EC%' --Smith住的楼层和Fletcher不相邻
AND name NOT LIKE '%BC%' AND name NOT LIKE '%CB%' --Fletcher住的楼层和Cooper不相邻
),
x3--生成楼层号
AS ( SELECT number AS id ,
SUBSTRING(x2.name, number, 1) AS name
FROM master.dbo.spt_values
INNER JOIN x2 ON 1 = 1
WHERE type = 'P'
AND number <= 5
AND number >= 1
)
SELECT a.id AS 楼层,
b.realname AS 姓名
FROM x3 a
INNER JOIN ttb b ON b.subname = a.name
ORDER BY id
楼层安排如下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHMAAAB1CAIAAADyeEmsAAAFU0lEQVR4nO2dy63bMBBF2VK26iCNMH2kAvURZBVAKUYNvKW8tgFmIVIafs3f8OPMhRH46cn21XnjkcQrKuzX7z/0wHiwV1Bfj2d4hTYaxEa8vh5PIosiIoulfLKMscCP55KAMozm2Yj5FYZKyV52A098r001GvNWn0P2pSOG7hvXrG3AWK3cQ5JyyIaRxdRsntGADduVsab9hiOSPRVTs696xeK0YX+0/ebO5dhYX9lkYaVcS3xPqihMNuZD7ZVRVUQ2vD0tycZ8aDOmpzL77Cviy+78VXZD8NnwOTHWrGUjyXCF41ln8UaWUqTyavbC1+BbZajaHizw3N7aPKNhG+E3n5Lsy2q7cAW8bvCKqFnb4TTdwPAX/vYZr001GniTt9RmqtnGGsRGvIgslr4eT/b1eNID48GOd2KMDfLvRBJCvOkGx3H83UX3x+l1FsWSZYx1J8sY640rQVSzWKKaxVKVmt2+M/6zb83u66LODvgWvfX7uizrXgGjQ4U1u//4JjenAVl/zW6cKUL7ugTYnigvoCOQHbpmUwENRTbYZxuR9dfsvi5MQ7Svy8L5whhjy7qt8skOlzNVvCtPbyMVyQ5dswquAgZQwydXH4A1ewGtXb+fUbNAZ8u1v+8+shfNXmSHr1mIlm8TkR25ZrXDAarZujW7qb2QbJthsnJ1UNodydI5WKpo3ABLVLNYoprFkiQbjhyoZjMkycZkDxTVpErEdIPeFSCEmLMbENnqIrJYIrJYKiV7n1bWHd30e3UKhDUNjESpiCwYCgmHJDW9um3cp/wbHwNutW6AGXxoXnt8co5qke1Xsz6wd4NQvowlMLlxrHMlEec6yRtXh6yVQ6Eohez9l1bPrCXANFgHZMDnqGPuhlUg2warSCJrD7y+XXIO1zKoZd3yO00p2WZYRVKfzSArK1T/1hf08DKybffDKccGkd3AOLKxFvUiCzKSq+cjKu14Vo/JHUv2dVkWc517m0CWXuD2vzwHQz5aI7JY+o/JIovIYumITGt6+xRiUrI1MwqSkqBugCEiiyUiiyUii6VSshvOpegBrw5pY1Seo//m4+NlZO85LRvHZxskC4aufQPhM5G91cJ4FFnf33hWsi3CmrSaheNwelywcTjcVSmb8bktzhRG7rPm1d6uq7yLsxmf25kTRvPDVTeAuCU1fVdbNZvxuZ06FTfInkb0+aJ3EhO8RKLqNhSRHeRKDrPPMr7B/Zg928bIca6n45AVZriBq7g+C7AZ3QBOepZ+q2UzPrd0DlZfRBZLRBZLRBZLB6U1SDoorcGToG6AISKLJSKLJSKLpTpk4dgctleH9LPbhfPkk1SE8aQaZMF5OKpCZOHHZwQ2Q5KVA/FE1lAxWf1WQ6hKJquFMeoHmNnoWY55S7SyLKeQrBwG7U8WDiJKN64wxphLIzdB3oZOvyVaaZZTRBYWx3A1GwhjbLvu2SBFWU4JWfvD+6U1brKeMCaWbFGWU+eoa8SaDYUxrm5gRrqlWc4HkxVWlqRugKb9ytpR+F7ehWwbDWIjUkQWS0QWS0QWSwelNUg6KK3Bk6BugCEiiyUiiyUii6VCsvCa9b7zFOCoqR5ymEOIjVROtv/dTuTdNYx7byz6negnI9vWbtjGypWVjWvx0axkm/WCt2NdG1cjWmpU0FmzmPNpbLflM+16X00PZ884mVbKYFLdzj8DRFLj29n5fWSR59PYbj+DrNyT3SPZbrKI82lst+Vza1pcJfN+R3oZCnUDxPk0ttv559Y4E0P3URfifBrbLZ2D1ReRxRKRxRKRxdJBaQ2SDkprkHTynen/MJpLRBZL/wAMB1CQ1XAk6QAAAABJRU5ErkJggg==" alt="" />
(本文完)
利用SQL进行推理的更多相关文章
- 利用SQL Server 2008 R2创建自动备份计划
本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动 Sql Management studio,确保"SQL Se ...
- 利用SQl对数据库实行数据拆分与组合
利用SQl对数据库实行数据拆分与组合实现提供以下几种方案: 方法一: WITH CTE AS (SELECT A.Id,A.[Uid],UserName FROM (SELECT A.[id], RE ...
- 利用SQL注入漏洞登录后台的实现方法
利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- 利用 SQL Monitor 查看语句运行状态步骤
利用 SQL Monitor 查看语句运行状态步骤 1.确定语句被 SQL Monitor 监控 SQL> SELECT * FROM GV$SQL_MONITOR WHERE sql_id=' ...
- ASP.net(C#)利用SQL Server实现注册和登陆功能
说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...
- 利用sql命令把结果集输出到文件
利用sql命令把结果集输出到文件 红色部分的三条命令完成把结果集输出到文件!! [root@test root]# psql -hlocalhost -Utest testWelcome to psq ...
- 利用SQL Profiler 追踪数据库操作
SQL Server 事件探查器 是一个界面,用于创建和管理跟踪并分析和重播跟踪结果. 这些事件保存在一个跟踪文件中,稍后试图诊断问题时,可以对该文件进行分析或用它来重播一系列特定的步骤. SQL S ...
- KPPW2.5 漏洞利用--SQL注入
KPPW2.5 漏洞利用--SQL注入 SQL注入--布尔型盲注 环境搭建 1,集成环境简单方便,如wamp,phpstudy.... 2,KPPW v2.2源码一份(文末有分享)放到WWW目录下面 ...
随机推荐
- Android Weekly Notes Issue #238
Android Weekly Issue #238 January 1st, 2017 Android Weekly Issue #238 本期内容包括: Firebase发送Notification ...
- 【Android 复习】 : Activity之间传递数据的几种方式
在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...
- Toad 中的compare使用方法
1.首先连接要对比后执行的数据库 2.设置对比内容 3.对比后的执行脚本
- PowerDesigner 如何生成数据库更新脚本
最近在学习使用PowerDesigner 这个数据库设计工具,发现真的很强大,可以做很多事情,其中就涉及到如果数据库要进行更新了怎么办,主要是增加表,最麻烦的是修改字段名称,增加字段等操作,遇到主要的 ...
- 基于iOS,Android的服务器证书失效检测
1.前言 在目前的iOS,Android手机上,当手机应用进行SSL通信时,手机端默认是不会进行服务器证书是否失效的监测. 在iOS上,系统是会定期获取所访问服务器的证书信息然后出存在本地. 在And ...
- ASP.NET MVC- Controllers and Routing- Controller Overview
In this tutorial, Stephen Walther introduces you to ASP.NET MVC controllers. You learn how to create ...
- hibernate性能消耗太狠了。果断减肥引发的连串意外惊喜
近期在云服务器上新部署了一个项目 硬件配置 CPU: 2核 内存: 4096 MB (I/O优化) 开始是调试测试在用 没发觉,今天我看了下监控 cpu使用率达到了60-70% 而且一直持续 我 ...
- 【设计模式 - 23】之模版方法模式(Template)
1 模式简介 模版方法模式的定义: 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模版方法模 ...
- extjs6.0点击grid一行数据显示在一端的form中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- sqlserver 存储过程中拼接sql语句 动态执行
ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @grad ...