SQL Join 2表,返回仅存在1个值且没有其他值的记录

时间:2014-04-08 16:44:56

标签: tsql

我遇到了返回数据记录的问题。我首先想要找到一个记录,其中某个值在为2个表连接的列中存在'0000'。下面是我的T-SQL;

    SELECT ColumnA, ColumnB, ColumnC
            FROM Table1, Table2
            WHERE  Table1.ColumnB. = Table2.ColumnB
            and ColumnC='0000'

这将返回所有返回记录中至少存在一次“0000”的所需数据记录。

我的问题是,我该怎么做,只返回不同的记录,其中'0000'是唯一存在的值(一次或多次),并且返回的数据记录不存在其他值

非常感谢!

2 个答案:

答案 0 :(得分:1)

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'

如果你想使用连接
猜测ColumnC在表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')

答案 1 :(得分:1)

以下是使用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) 

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