SQL连接查询中的WHERE关键字的位置
由于自然的笨拙和思维的不严谨、不擅长写SQL语句,大师不要笑,请跳过这篇文章。背景不会被介绍。首先,构建表并插入测试数据。字段有注释
复制代码代码如下所示:
-医生的手表
创建表的医生
(
身份标识(1, 1),ID自我成长
docnumber nvarchar(50)不为空,医生代码
姓名nvarchar(50)不为空,医生的名字
)
去
-插入测试数据
插入的医生
值('007 ',)
插入的医生
值('008,约翰)
插入的医生
值('009,吉姆)
-来源表(登记表)
创建表nosource
(
id标识(1, 1),
docnumber nvarchar(50)不为空--在医生桌医生代码对应
时间日期不为空
)
去
-插入测试数据
插入nosource
值('007 ','20120819)
为nosource插入
值('007 ','20120820)
插入nosource
值('007 ','20120821)
为nosource插入
值('008 ','20120821)
当表建立时,测试数据也可以。
1。了解每个医生的相关信息和医生的来源。
这太简单了,哪怕只是一点点,可以学会HelloWorld基于数据库的朋友会严重真的BS。但是代码仍然是写。
复制代码代码如下所示:
-可以进行简单的组查询。
select count(nos.id)作为personnumsouncecount——总数
dct.id是docid,
Dct.NAME,
dct.docnumber,
nos.worktime
从医生到DCT
左连接nosource作为NOS在dct.docnumber = nos.docnumber
集团通过dct.id,
Dct.NAME,
dct.docnumber,
nos.worktime
真的很简单,一个小团体就能做到,那它又怎么卖呢。
现在的需求变化,需要匹配的条件:请求的源表的时间比当前日期更有效,否则将不匹配。
If the workTime condition does not match, the value of the corresponding PersonNumSounceCOUNT field should be 0. 例如,吉姆医生不匹配和匹配的号源,其personnumsouncecount字段的值应该是0。仰望天空40度,想到哪里关键字可以被过滤,然后查询一下吗试试。
复制代码代码如下所示:
select count(nos.id)作为personnumsouncecount——总数
Dct.ID,
Dct.NAME,
dct.docnumber,
nos.worktime
从医生到DCT
左连接nosource作为NOS在dct.docnumber = nos.docnumber
其中DateDiff(天,getdate(),nos.worktime)> 0
集团通过dct.id,
Dct.NAME,
dct.docnumber,
nos.worktime
我相信有人会写上面的代码,但在执行查询后,发现它完全不符合要求,甚至吉姆博士的基本信息和表格记录也被过滤掉了,怎么了
原因很简单。在连接查询之后,使用关键字关键字来过滤连接查询结果集中的数据。由于右表(源表)的条件不匹配,左边表(医生的表)的数据将被过滤掉。
因此,会出现上述现象(吉姆医生的信息和记录都不见了)你想马上检查一下吗如何实现它呢
事实上,正确的写作方式应该是这样的。
复制代码代码如下所示:
select count(nos.id)作为personnumsouncecount——总数
Dct.ID,
Dct.NAME,
dct.docnumber,
nos.worktime
从医生到DCT
左连接(选择*)
从nosource
其中DateDiff(天,getdate(),工作时间)> 0
)作为NOS对dct.docnumber = nos.docnumber
集团通过dct.id,
Dct.NAME,
dct.docnumber,
nos.worktime
再次,OK是满足需求的结果,其思想是我们只需要过滤右边的表,我们使用子查询过滤的结果集作为连接查询的右表,然后连接和分组。
事实上,编译一个简洁而高性能的SQL语句需要强大的逻辑思维(和数学密不可分)和经验:
复制代码代码如下所示:
选择的总和(时nos.worktime > getdate然后1其他0端)为personnumsouncecount,总
dct.id是docid,
Dct.NAME,
dct.docnumber
从医生到DCT
左连接nosource作为NOS在dct.docnumber = nos.docnumber
集团通过dct.id,
Dct.NAME,
dct.docnumber
这样,我不知道你是否能理解,这就是它的意思。作者的能力和表达水平确实有限,难免有偏差,希望读者能理解!