工作在SQL服务器
我有三张桌子
[TESTDB].[dbo].[TestList]
[Routing].[dbo].[WUList]
[Routing].[dbo].[WUArea]
[TESTDB]。[dbo]。[TestList]数据看起来像
TestID
1089
41651
1235
6987
51555
71666
[路由]。[dbo]。[WUList]数据看起来像
TestIDS AreaPerson1 AreaPerson2 AreaPerson3
01089 TSmith MBlevins OMyhead
01099 RJohns NULL NULL
03368 RJohns TPayne MSmith
45646 TSmith MBlevins NULL
55566 NULL MBlevins WRestle
77788 ORandy NULL LOrdy
02347 MArt TPayne MSmith
03333 NULL NULL NULL
04444 NULL NULL NULL
[路由]。[dbo]。[WUArea]数据看起来像
Area AreaPerson1 AreaPerson2 AreaPerson3
01 ORandy MBlevins OMyhead
03 RJohns SNicks IPfreely
04 RJohns MBlevins BFort
07 TSmith SNicks BFort
41 MArt TSmith WRestle
45 ORandy ORandy ORandy
51 ... ... ...
52 ... ... ...
71 ... ... ...
我已经能够将[TestList]加入到[UWARE]或[WUList]我需要的数据显示方式,但我无法以我需要的方式加入3个列表。
>
常见的连接字段是[TestList]。[TestID],[WUList]。[TestIDS]和[WUArea]。[区域]
返回列[TestID]、[AreaPerson1]、[AreaPerson2]、[AreaPerson3]
将[TestList]加入[WUIST]时,如果任何“persons”返回NULL,请将[TestID]的前两位数字加入[WUIST]。[Area]并获取相应的“person”
**[测试列表]。[TestID]长度为4位,在加入[WUArea]时,应在左1位附加0。[区域]。[TestID]长度为五位数,可使用左两位数连接
如果[TestList]。[TestID]不出现在[WUList]或[TestList]的左两位数字中。[TestID]不出现在[WUArea]中,设置[AreaPerson1]=JDoe,[AreaPerson2]=SDoe,[Areaperson3]=TBuck
这一次让我彻夜未眠。非常感谢你的帮助。
create table TestList
(
TestID int
)
insert TestList
values
(1089)
, (41651)
, (1235)
, (6987)
, (51555)
, (71666)
, (01099)
, (03368)
, (45646)
, (55566)
, (77788)
, (02347)
, (03333)
, (04444)
create table WUList
(
TestIDS int,
AreaPerson1 varchar(10)
, AreaPerson2 varchar(10)
, AreaPerson3 varchar(10)
)
insert WUList
values
('01089','TSmith','MBlevins','OMyhead')
, ('01099','RJohns',NULL,NULL)
, ('03368','RJohns','TPayne','MSmith')
, ('45646','TSmith','MBlevins',NULL)
, ('55566',NULL,'MBlevins','WRestle')
, ('77788','ORandy',NULL,'LOrdy')
, ('02347','MArt','TPayne','MSmith')
, ('03333',NULL,NULL,NULL)
, ('04444',NULL,NULL,NULL)
create table WUArea
(
Area varchar(3),
AreaPerson1 varchar(10)
, AreaPerson2 varchar(10)
, AreaPerson3 varchar(10)
)
insert WUArea
values
('01','ORandy','MBlevins','OMyhead')
, ('03','RJohns','SNicks','IPfreely')
, ('04','RJohns','MBlevins','BFort')
, ('07','TSmith','SNicks','BFort')
, ('41','MArt','TSmith','WRestle')
, ('45','ORandy','ORandy','ORandy')
select a.TestID
, case
when b.TestIDS is null or c.Area is null then 'JDoe'
else ISNULL(b.AreaPerson1,c.AreaPerson1)
end as AreaPerson1
, case
when b.TestIDS is null or c.Area is null then 'SDoe'
else ISNULL(b.AreaPerson2,c.AreaPerson2)
end as AreaPerson2
, case
when b.TestIDS is null or c.Area is null then 'TBuck'
else ISNULL(b.AreaPerson3,c.AreaPerson3)
end as AreaPerson3
from TestList a
left join WUList b on a.TestID = b.TestIDS
left join WUArea c on '0' + LEFT(a.TestID,1) = c.Area
请注意:TestList中上面的数据样本没有足够的相关数据,因此我将WUList表中的TestID添加到TestList表中,以便进行更多操作。
我很快就搞定了,所以如果您的表的数据集中有任何其他变化,那么您需要进行调整。到目前为止,它涵盖了你的所有基础(至少从我的理解来看)
如果您想在结果集中看到更多数据,以验证是否考虑了空值,请使用下面的语句。
select a.TestID, '0' + LEFT(a.TestID,1) as WUAreaTestID
, b.AreaPerson1
, case
when b.TestIDS is null or c.Area is null then 'JDoe'
else ISNULL(b.AreaPerson1,c.AreaPerson1)
end as AreaPerson1n
, b.AreaPerson2
, case
when b.TestIDS is null or c.Area is null then 'SDoe'
else ISNULL(b.AreaPerson2,c.AreaPerson2)
end as AreaPerson2n
, b.AreaPerson3
, case
when b.TestIDS is null or c.Area is null then 'TBuck'
else ISNULL(b.AreaPerson3,c.AreaPerson3)
end as AreaPerson3n
, c.*
from TestList a
left join WUList b on a.TestID = b.TestIDS
left join WUArea c on '0' + LEFT(a.TestID,1) = c.Area
问题内容: 当表较小时,此查询具有合理的时间。我正在尝试确定什么是瓶颈,但是我不确定如何分析结果。 我已经尝试了INNER JOIN’ing和表的方法以及执行INNER SELECT的方法。两者有相同的时间。 这是EXPLAIN的链接:https : //explain.depesz.com/s/9lhr Postgres版本: x86_64-unknown-linux-gnu上的PostgreS
问题内容: 我有两个表(“国家/地区”和“鸭子”),其中“国家/地区”表包含世界上每个国家/地区,并且“鸭子”表中有一个鸭子列表,其中有一个country_id字段可链接到主要国家/地区。 我正在尝试获取仅包含至少一只鸭子的国家/地区列表,并从鸭子表中找到该国家内评分最高的鸭子的单个匹配记录。到目前为止,我有: 这将返回每只鸭子的列表,而不是每个国家/地区的列表。 如果有人能指出我正确的方向,我将
问题内容: 我想用sequelize ORM获得这样的查询: 问题是,后遗症不允许我在where子句中引用“ B”或“ C”表。以下代码 给我 这是完全不同的查询和结果 甚至不是有效的查询: 使用sequelize是否可以进行第一个查询,还是我应该坚持使用原始查询? 问题答案: 将引用联接表的列包装在
我正在尝试从不同的表中选择2列(它们是连接的),但是我无法使用标准API使其工作。问题是,我已经创建了一个DTO类作为投影,但是我不能将连接的表实体转换为内部类。为了澄清问题,下面是我的课程: 用户: 角色: DTO类:
嗨,伙计们,我正在使用Laravel5.5,我有两个表,用户和服务 用户表 ID 名称 电子邮件 密码 地址 城市 国家 邮政编码 null 提前谢了。热烈问候:阿卜杜拉·沙希德。
问题内容: 作为hibernate可选连接的后续内容 系统中许多现有查询都依赖EntityOne和EntityTwo之间的映射关系,并且更改此关系不是一个吸引人的选择,但是我现在需要开始存储和检索联接表中不存在的值。顺便说一句,这可以与以下映射配合使用: ..但是,在查询时,如果结果的值在联接表中不存在,则该字段的值为null,并且我无法告知其实际值。我希望hibernate只在不存在关系的情况下