SQL在使用减法运算时考虑重复

SQL在使用减法运算时考虑重复,sql,sql-server,Sql,Sql Server,下面的表格中有两个列值,用连字符分隔 表1 Kavana-01 Sandhya-01 Sandhya-02 例外的 Kavana-01 Sandhya-01 可输出 Kavana-01 Sandhya-02 考虑到表1中的唯一性,要求获得输出,如OutputTable=Table1减去ExceptionTable。由于Kavana一词是唯一的,因此不应将其用于减号运算。试试这个。假设col1和col2是第一列和第二列 SELECT t.col1,t.col2,e1.col2 AS

下面的表格中有两个列值,用连字符分隔

表1

Kavana-01
Sandhya-01
Sandhya-02
例外的

Kavana-01
Sandhya-01
可输出

Kavana-01
Sandhya-02

考虑到表1中的唯一性,要求获得输出,如OutputTable=Table1减去ExceptionTable。由于Kavana一词是唯一的,因此不应将其用于减号运算。

试试这个。假设col1和col2是第一列和第二列

    SELECT t.col1,t.col2,e1.col2 AS prio FROM 
(SELECT t1.col1,t1.col2, row_number() over (partition by t1.col1 order by CASE WHEN e1.col2 IS NULL THEN 0 ELSE 1 END) 
as OrderNumber
FROM Table1 t1
LEFT JOIN ExceptionTable e1 ON t1.col1=e1.col1 AND t1.col2=e1.col2) t
WHERE t.prio IS NULL OR t.OrderNumber=1
我的测试代码。我用的是临时表

CREATE TABLE #Table1 (
    col1 varchar(255),
    col2 varchar(255)
);


CREATE TABLE #ExceptionTable (
    col1 varchar(255),
    col2 varchar(255)
);

INSERT INTO #Table1 (col1,col2) values ('Kavana','01');
INSERT INTO #Table1 (col1,col2) values ('Sandhya','01');
INSERT INTO #Table1 (col1,col2) values ('Sandhya','02');
INSERT INTO #Table1 (col1,col2) values ('Mounil','01');
INSERT INTO #Table1 (col1,col2) values ('Mounil','02');

INSERT INTO #ExceptionTable (col1,col2) values ('Kavana','01');
INSERT INTO #ExceptionTable (col1,col2) values ('Sandhya','01');

--DROP TABLE #Table1
--DROP TABLE #ExceptionTable

SELECT * FROM #Table1
SELECT * FROM #ExceptionTable

SELECT t.col1,t.col2 FROM 
(SELECT t1.col1,t1.col2,e1.col2 AS prio, row_number() over (partition by t1.col1 order by CASE WHEN e1.col2 IS NULL THEN 0 ELSE 1 END) 
as OrderNumber
FROM #Table1 t1
LEFT JOIN #ExceptionTable e1 ON t1.col1=e1.col1 AND t1.col2=e1.col2) t
WHERE t.prio IS NULL OR t.OrderNumber=1

SQL Server中的一种方法是
,除了

select col1, col2
from table1
except
select col1, col2
from table2;

什么是“用连字符分隔的两列值”?“考虑独特性”是什么意思?表中的所有值似乎都是唯一的,因此您必须表示其他值。使用“减号运算”,您的意思是?表1“减号”ExceptionTable是否只返回Sandhya-02?Sandhya-02-->这是单列值或多列值。提供清晰的表结构将帮助这里的每个人提供预期的答案。谢谢您的评论,但是上面的查询结果输出错误---Sandhya-01 Sandhya-02您确定吗?我得到了正确的答案。请检查卡瓦纳-01 Sandhya-02的任何拼写错误,非常感谢,但仍然不正确,因为增加了两列--插入到#Table1(col1,col2)值('Mounil','01');在#表1(col1,col2)中插入数值('Mounil','02');将只产生一行。理想情况下,它应该是两行,因为Mounil在Exeption中不存在table@kavana你是对的。我现在更新查询并检查它。如果您有任何其他场景,请发布它。