2014-04-08 99 views
0

我遇到了返回数据记录的问题。我首先想要查找记录,其中某个值在存在“0000”的列中进行2个表的连接。以下是我的T-SQL;SQL加入2个表,返回只有1个值存在且没有其他值的记录

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

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

我的问题是,我该怎么做一样的,只是返回重复的记录,其中“0000”是存在的唯一值(一个或多次),并没有其他的价值存在返回的数据记录

非常感谢!

回答

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') 
+0

你打算给'NOT IN'和'NOT EXISTS'解决方案吗? –

+0

@ConradFrix我想到了NOT EXISTS。这可能是表现最好的。我不确定您是否可以在不加入排除内容的情况下离开? – Paparazzi

+0

谢谢,Blam!仅供参考,第一个查询似乎并没有排除在哪里t2.columnc可以是除'0000'以外的其他东西我有一对多的记录,我可能有'0000'作为匹配返回记录的值,但是相同的相关父记录不能有“0000”以外的任何值被返回并计数。第一个查询返回96772个记录另外两个查询相互匹配相同的记录数(57263),也与Conrad Frix提供的查询匹配。非常感谢两位如此慷慨地提供解决方案!我是否可以信任一个或两个人的答案? – rogabone

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,我只使用一个表,因为问题中的连接并不重要。

+0

+1你能解释为什么期望我的回答不会工作(根据OP) – Paparazzi

+0

我的猜测是OP在select子句中包含COLUMNC –

相关问题