Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于内部联接的select查询不起作用,不返回任何内容_Sql_Sql Server_Select_Inner Join_Where - Fatal编程技术网

Sql 基于内部联接的select查询不起作用,不返回任何内容

Sql 基于内部联接的select查询不起作用,不返回任何内容,sql,sql-server,select,inner-join,where,Sql,Sql Server,Select,Inner Join,Where,我有下面的代码,它不会在应该返回的时候返回任何值。有人能发现它有什么毛病吗?当我运行脚本时,我得到0个值,返回0个受影响的行,即使我知道应该选择一些行 这只是整个脚本的一部分,当我运行所有内容时,会收到错误消息警告:通过聚合或其他集合操作消除空值。但我不知道这对我的剧本意味着什么。我在脚本中只有一个groupby,我没有在这里发布,因为编码是有效的。有人知道吗 下面的代码应创建一个临时表,并在满足以下条件的情况下从表StatusHistorik向临时表插入行: 1[NyStatus]=4 NyS

我有下面的代码,它不会在应该返回的时候返回任何值。有人能发现它有什么毛病吗?当我运行脚本时,我得到0个值,返回0个受影响的行,即使我知道应该选择一些行

这只是整个脚本的一部分,当我运行所有内容时,会收到错误消息警告:通过聚合或其他集合操作消除空值。但我不知道这对我的剧本意味着什么。我在脚本中只有一个groupby,我没有在这里发布,因为编码是有效的。有人知道吗

下面的代码应创建一个临时表,并在满足以下条件的情况下从表StatusHistorik向临时表插入行:

1[NyStatus]=4 NyStatus是StatusHistorik表中的一列

2表SKL_AdminKontroll_SkaÅtgärdas F中不应存在变量EnhetsId。代码:F.EnhetsId为null

我在这两种情况下都使用了内部联接。这将导致temp表中出现许多观察值/行,但不返回任何结果。有没有人发现编码有任何错误可以解释结果的缺失

我应该提到的是,当我注释掉最后一个内部连接和where语句的最后一部分时,脚本按预期工作。因此,我怀疑这是最后一个内部连接语句不知何故是错误的

declare @temp2 table (
   EnhetsId varchar(50), 
   TjanstId Int, 
   Tabell varchar(50),
   Kommentar ntext,
   Uppdaterad datetime
);
WITH ENHET_AVSLUT AS 
(
        SELECT DISTINCT A.[EnhetsId]
        FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A
        inner join (
                 select [EnhetsId], max(SenastUppdaterad) as SenastDatum
                 from [StatistikinlamningDataSKL].[dbo].[StatusHistorik]
                 group by [EnhetsId]
                 ) B
        on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum
        INNER JOIN
                 StatistikinlamningDataSKL.dbo.SKL_AdminKontroll_SkaÅtgärdas F ON A.EnhetsId = F.EnhetsId
        WHERE [NyStatus] = 4 AND F.EnhetsId is null
)
insert into @temp2  
    (EnhetsId, TjanstId, Tabell, Kommentar, Uppdaterad) 
SELECT 
    EnhetsId, 1, ''GR_PS09_1'', ''OK'', getdate() 
from ENHET_AVSLUT

select * from @temp2
致以最良好的祝愿,
汉内斯因为你在说

The variable "EnhetsId" should not exist in the table "SKL_AdminKontroll_SkaÅtgärdas" (F). Code: "F.EnhetsId is null". 
内部联接将尝试联接表,但无法对空值执行联接,因此结果将是零行

所以您必须尝试使用左联接,不管联接条件是否满足,左侧的表都将被拉入

不过,我必须警告您,如果表太大,可能会出现性能问题

您的内部SQL必须类似于

SELECT DISTINCT A.[EnhetsId]
    FROM [StatistikinlamningDataSKL].[dbo].[StatusHistorik] A
    inner join (
             select [EnhetsId], max(SenastUppdaterad) as SenastDatum
             from [StatistikinlamningDataSKL].[dbo].[StatusHistorik]
             group by [EnhetsId]
             ) B
    on A.[EnhetsId] = B.[EnhetsId] and A.[SenastUppdaterad] = B.SenastDatum
    LEFT JOIN
             StatistikinlamningDataSKL.dbo.SKL_AdminKontroll_SkaÅtgärdas F ON A.EnhetsId = F.EnhetsId
    WHERE [NyStatus] = 4

对表SKL_AdminKontroll_SkaÅtgärdas使用左外部联接。谢谢!!它解决了这个问题。尽管如此,我还是注意到完整的脚本仍然无法工作,我认为这是由于错误消息:警告:通过聚合或其他集合操作消除了Null值。你对这个问题有什么想法吗?你是对的,左连接是正确的方法。但我仍然需要和F.EnhetsId为null,以避免表SKL_AdminKontroll_SkaÅtgä中没有的值rdas@user2995808对,添加F.EnhetsID为NULL将排除表F中的那些,这相当于WHERE NOT EXISTS…在F中选择join谓词。。看见