首页 > 解决方案 > 在声明的表上选择不同的

问题描述

我需要创建连接查询将通过检查其他表中的数据来获取数据。

首先,我声明(并填写)两个带有 ID 列表的表,我将检查其他表。在下一步 (2) 中,我声明了新表并填充了通过一些检查参数获得的值。此表仅包含一列 (ID)。填充后,如果我SELECT DISTINCT从该表执行查询,我将获得真正唯一的 ID。没关系。

但在下一步 (3) 中,我声明了多个表并用 3 个表填充它。当然,它包含许多重复项。但我必须创建此查询以进行检查和连接。之后,如果我执行select distinct h from @NonUnicalConcat它会返回许多重复的 ID。

我做错了什么?哪里有错误?

USE CurrentBase;
--STEP 1
DECLARE @TempCSTable TABLE(TempTableIDColumn int);
INSERT INTO @TempCSTable VALUES('3'),('4');
DECLARE @TempCVTable TABLE(TempTableIDColumn int);
INSERT INTO @TempCVTable VALUES('2'),('13');
--STEP 2
DECLARE @TempIdTable TABLE(id int);
INSERT INTO @TempIdTable
       SELECT TT1.ID
       FROM Table1 AS TT1
            LEFT OUTER JOIN Table2 ON Table2.ID = TT1.OptionalColumn
            LEFT OUTER JOIN Table3 AS TT2 ON TT2.ID = TT1.OptionalColumn
            LEFT OUTER JOIN Table4 AS TT3 ON TT3.ID = TT2.OptionalColumn
       WHERE TT1.ValueDate > '2020-06-30'
             AND TT1.ValueDate < '2020-08-04'
             AND TT1.OptBool = '1'
             AND TT1.OptBool2 = '0'
             AND EXISTS
                        (
                            SELECT Table5.ID
                            FROM Table5
                            WHERE Table5.ID = TT1.ID
                                  AND Table5.CV IN
                                                           (
                                                               SELECT TempTableIDColumn
                                                               FROM @TempCVTable
                                                           )
                                  AND Table5.OptBool = '1'
                        )
             AND EXISTS
                        (
                            SELECT Table6.ID
                            FROM Table6
                            WHERE Table6.IID = TT3.ID
                                  AND Table6.CS IN
                                                            (
                                                                SELECT TempTableIDColumn
                                                                FROM @TempCSTable
                                                            )
                        );
SELECT distinct * FROM @TempIdTable;--this code realy select distinct
--STEP 3
DECLARE @NonUnicalConcat TABLE(c int, s int, h int);
INSERT INTO @NonUnicalConcat
       SELECT TT1.TempTableIDColumn AS cc, 
              TT2.TempTableIDColumn AS ss, 
              TT3.id AS hh
       FROM @TempCVTable AS TT1, 
            @TempCSTable AS TT2, 
            @TempIdTable AS TT3
       WHERE NOT EXISTS
                        (
                            SELECT HID
                            FROM OtherBase.dbo.Table1
                            WHERE HID = TT3.id
                                  AND CS = TT2.TempTableIDColumn
                                  AND CV = TT1.TempTableIDColumn
                        );
select distinct h from @NonUnicalConcat;--this code return many duplicates

标签: sql-serverdistinct

解决方案


推荐阅读