当前位置: 首页 > 知识库问答 >
问题:

当联接中的一个表没有记录时,联接不会返回值

居焱
2023-03-14

我有这个存储过程。我的问题是当记录不存在于机构表是不返回任何东西。我想说即使没有记录在机构仍然返回,所以我已经添加了左外JOIN机构和_Agency=IsNull(U._Agency,")在顶部。但仍然不返回值。它是返回值时,我采取A._IsActive=1在最后一行出来。我该怎么办id A._IsActive没有值仍然返回。我尝试了相同的ISNull但不工作。

declare @Username   VARCHAR(50)
,   @Password   VARCHAR(50)

set @Username = 'admin'
set @Password = 'password2'

SELECT U.Username
 ,_Partner = u.AID
 ,_Agency = IsNull(U._Agency,'')
 , UR._Role
 ,R.Name 
FROM [PartnerPortal].[dbo].[User] AS U
left outer JOIN [PartnerPortal].[dbo].Agency AS A 
  ON U._Agency = A._IdxIdentity 
JOIN [PartnerPortal].[dbo].User_Role AS UR 
  ON U._IdxIdentity = UR._User
JOIN [PartnerPortal].[dbo].[Role] AS R 
  ON UR._Role = R._IdxIdentity
WHERE (Username = @Username)
  AND [Password] =@Password
  AND U._IsActive = 1 
  AND A._IsActive = 1  
  AND UR._IsActive = 1 
  AND R._IsActive = 1

共有1个答案

长孙淳
2023-03-14

问题就在这里:

...
left outer JOIN [PartnerPortal].[dbo].Agency AS A 
    ON U._Agency = A._IdxIdentity 
...
WHERE ... A._IsActive = 1

Agent没有匹配的行时,该表返回的所有列都是null,但是您要求_IsActive1,这对于左联接不成立。

将该条件移动到左连接的ON条件中:

...
left outer JOIN [PartnerPortal].[dbo].Agency AS A 
    ON U._Agency = A._IdxIdentity 
    AND A._IsActive = 1
...
WHERE ... 

现在,如果有匹配的行,则条件将适用,如果没有匹配的行,则将得到all null行。

 类似资料:
  • 问题内容: 我正在寻找连接2个表并仅显示明细表的最后一条记录的正确SQL代码。 我有一个带有2个表的数据库, 每个交易都有多个评论,但是我想创建一个显示所有交易的视图,并且仅显示每个交易的最后一条评论(由CommentTime确定)字段 问题答案: 编辑:我没有足够接近地阅读初始问题,也没有注意到视图中需要所有DEALS行。以下是我的修改后的答案:

  • 问题内容: 我有两个表(“国家/地区”和“鸭子”),其中“国家/地区”表包含世界上每个国家/地区,并且“鸭子”表中有一个鸭子列表,其中有一个country_id字段可链接到主要国家/地区。 我正在尝试获取仅包含至少一只鸭子的国家/地区列表,并从鸭子表中找到该国家内评分最高的鸭子的单个匹配记录。到目前为止,我有: 这将返回每只鸭子的列表,而不是每个国家/地区的列表。 如果有人能指出我正确的方向,我将

  • 问题内容: 我在MySQL中有以下查询: 该表有27行,但查询仅返回1行。基于 这个问题, 我认为可能是由于WHERE子句。该表具有字段id,属性,字段,值,其中是第三个表的外键(我不需要从中获取数据)。 有没有一种方法可以从第一个表中选择所有行,包括表#2中字段为23的值(如果没有字段23,则为NULL)? 问题答案: 当然。将WHERE条件移动到JOIN:

  • 我有一个表格和一个表格。包含所有课程的列表,包含教授/协助该课程的志愿者列表。 我想写一个查询,返回没有任何志愿者分配给它的所有课程的列表。这就是正在发生的事情: 以下所有查询都返回 course_id 3 course_id 4 course_id 5 为什么course_id 1(正确)被遗漏,而course_id 3却不是??? 同样的问题,但没有一个解决方案对我有效: 左侧外部连接轨4

  • 问题内容: 我正在尝试使用以下查询获取每天打开的页面数。 我得到的输出是这样的: 问题是,在我的日表中,我有一列包含数字1到30来表示一个月中的天数。我进行了左外部连接,希望在天数列中显示所有天数! 但是我的查询正在这样做,为什么会这样呢? 谢谢大家的帮助。 问题答案: 解决方案是将WHERE更改为AND,以便该条件成为联接条件的一部分,而不是联接之后应用的过滤器: 现在,左表中的所有行都将出现在

  • 它还会返回这个表,遗漏一些行(我希望它给出所有流派,而不仅仅是演员在其中扮演角色的流派): 有趣的是,它为“动画”返回了“0”,但为“儿童”或“喜剧”没有行,这是我正在寻找的结果(所有流派都返回了)。我做错了什么?