ITPUB论坛-中国专业的IT技术社区

标题: 联表查询的问题 [打印本页]

作者: 乐山一虫    时间: 2018-7-11 22:10
标题: 联表查询的问题
有表TMA、TMB、TMC,均有6个字段,格式均为为smallint,测试数据时共列出10个条件,但发现存在问题,请各位大虾指点一下问题出在哪里。

GO
DELETE TMA
INSERT INTO TMA SELECT 10,40,95,121,156,208
DELETE TMB  
INSERT INTO TMB SELECT 10,40,95,121,156,208
DROP TABLE TMC
Go
  
SELECT DISTINCT
    t2.a,
    t2.b,
    t2.c,
    t2.d,
    t2.e,
    t2.f,
    t2.rn  INTO TMC
FROM
(
    SELECT *
    FROM TMA A
        CROSS APPLY
    (
        VALUES  
           
            (A.a - A.b - A.f),
            (A.a - A.c - A.d),
            (A.a - A.c - A.e),
            (A.b - A.c - A.d),
            (A.c - A.d - A.e),
            (A.c - A.d - A.f),
            (A.a + A.b + A.e),
            (A.a + A.b + A.f),
            (A.a + A.c + A.f),
            (A.b + A.c + A.f)

            
    ) t (rn)
) t1
    JOIN
    (
        SELECT *
        FROM TMB B
            CROSS APPLY
        (
            VALUES
            
            (B.a - B.b - B.f),
            (B.a - B.c - B.d),
            (B.a - B.c - B.e),
            (B.b - B.c - B.d),
            (B.c - B.d - B.e),
            (B.c - B.d - B.f),
            (B.a + B.b + B.e),
            (B.a + B.b + B.f),
            (B.a + B.c + B.f),
            (B.b + B.c + B.f)

        ) t (rn)
    ) t2
        ON t2.rn = t1.rn;

我想象的结果是:TMA和TMB中都只有一条完全相同的记录,则两个表任意位置的和差都是相同的,即:给出了10个要求和差相等的条件,则导入TMC表中的记录会是10次,但我测试的结果却不是这样的。

如上,TMA和TMB中的记录都是10,40,95,121,156,208 时,运行完上面的语句再运行
SELECT a,b,c,d,e,f,COUNT(*) FROM TMC GROUP BY a,b,c,d,e,f ORDER BY COUNT(*)
TMC返回的记录是10条;

TMA和TMB中的记录都是2, 4, 6,  8, 10, 12  时,运行完上面的语句再运行
SELECT a,b,c,d,e,f,COUNT(*) FROM TMC GROUP BY a,b,c,d,e,f ORDER BY COUNT(*)
TMC返回的记录是7条;

TMA和TMB中的记录都是 2, 3, 6, 10, 35, 40 时,运行完上面的语句再运行
SELECT a,b,c,d,e,f,COUNT(*) FROM TMC GROUP BY a,b,c,d,e,f ORDER BY COUNT(*)
TMC返回的记录是9条。


请大虾们指点一下是怎么回事。





欢迎光临 ITPUB论坛-中国专业的IT技术社区 (/) Powered by Discuz! X3.2
http://www.vxiaotou.com