Tsql SQL Join 2个表,返回仅存在1个值而不存在其他值的记录

Tsql SQL Join 2个表,返回仅存在1个值而不存在其他值的记录,tsql,Tsql,我面临返回数据记录的问题。我首先想找到一个列中存在某个值“0000”的记录,该列对两个表进行连接。下面是我的T-SQL SELECT ColumnA, ColumnB, ColumnC FROM Table1, Table2 WHERE Table1.ColumnB. = Table2.ColumnB and ColumnC='0000' 这将返回所需的数据记录,其中“0000”在所有返回的记录中至少存在一次 我

我面临返回数据记录的问题。我首先想找到一个列中存在某个值“0000”的记录,该列对两个表进行连接。下面是我的T-SQL

    SELECT ColumnA, ColumnB, ColumnC
            FROM Table1, Table2
            WHERE  Table1.ColumnB. = Table2.ColumnB
            and ColumnC='0000'
这将返回所需的数据记录,其中“0000”在所有返回的记录中至少存在一次

我的问题是,我如何做同样的事情,只返回不同的记录,其中“0000”是唯一存在一次或多次的值,并且返回的数据记录不存在其他值

非常感谢

SELECT distinct ColumnA, ColumnB
           FROM Table1, Table2
          WHERE Table1.ColumnB = Table2.ColumnB
            and ColumnC = '0000'
except 
SELECT distinct ColumnA, ColumnB
           FROM Table1, Table2
          WHERE Table1.ColumnB = Table2.ColumnB
            and ColumnC <> '0000'
如果要使用联接 猜测栏C在表2中

SELECT distinct Table1.ColumnA, Table1.ColumnB, Table2.ColumnC
           FROM Table1
           JOIN Table2
             on Table1.ColumnB = Table2.ColumnB
            and Table2.ColumnC = '0000'
           left join Table2 exclude 
             on Table1.ColumnB = exclude.ColumnB
            and exclude.ColumnC <> '0000'
          where exclude.ColumnB is null
这可能是最好的表演者

SELECT distinct Table1.ColumnA, Table1.ColumnB, Table2.ColumnC
           FROM Table1
           JOIN Table2
             on Table1.ColumnB = Table2.ColumnB
            and Table2.ColumnC = '0000'
            and not exists (select * from table2 exclude  
                             where exclude.ColumnB = Table1.ColumnB 
                               and exclude.ColumnC <> '0000')

这里有一个使用ALL关键字的解决方案

SELECT DISTINCT
       columna, 
       columnb, 
       columnc 
FROM   table1 t1 
       INNER JOIN table2 t2 
               ON table1.columnb = table2.columnb 
WHERE  t2.columnc = '0000' 
       AND t2.columnc = ALL (SELECT columnc 
                             FROM   table2 t2Check 
                             WHERE  t2.columnb = t2Check.columb) 

在这里,我只使用一个表,因为问题中的连接实际上并不重要

你也要给出不存在和不存在的解决方案吗?@ConradFrix我想到了不存在。它可能是最好的表演者。我不知道你是否可以不加入排除区就离开?谢谢,责怪!仅供参考,第一个查询似乎不排除t2.columnc可以是“0000”以外的其他内容。我有一对多个记录,其中“0000”作为与返回记录匹配的值,但同一相关父记录不能返回和计数“0000”以外的任何值。第一个查询返回96772条记录,其他两个查询相互匹配相同的记录计数57263,也匹配Conrad Frix提供的查询。非常感谢两位如此慷慨地迅速提供了解决方案!我认为答案是一个还是两个?你确定吗?这就是except语句所做的。正确,但是带有except的查询1返回了更多记录,这是因为查询不限于仅包含值“0000”的记录。它还为表2.c提供了具有“0000”的记录,在某些情况下还提供了其他值。Table1.columnB是主键和唯一值,也与Table2.columnB中的值匹配,但是此记录具有多对一关系和匹配记录Table2.ColumnC。我想要的记录只包含汇总到table1.columnB的ID的“0000”值,而Table2.ColumnC中没有其他可能的值。+1您能理解为什么我的答案中的expect根据OPM不起作用吗?我猜OP在select子句中包含了ColumnC