sql set操作和where子句

时间:2010-07-16 12:19:32

标签: sql-server-2005 tsql

是否可能有这样的查询(我收到错误):

SELECT ColumnA FROM Table1
EXCEPT
SELECT ColumnB FROM Table2
WHERE Table1.ColumnC = Table2.ColumnC

SQL无法在where子句中绑定Table1.colmnC。 有没有办法运行此查询?或者另一种获得相同结果的方法? 我知道我可以使用临时表或者......但是我想用set操作来完成它。

感谢

3 个答案:

答案 0 :(得分:1)

乍一看:

SELECT ColumnA FROM Table1
WHERE
    NOT EXISTS (SELECT * FROM Table2 WHERE Table1.ColumnC = Table2.ColumnC)

但是,我认为你想要从columnA值中排除B列值,其中columnC匹配columnsA和B:

SELECT ColumnA FROM Table1
WHERE
   NOT EXISTS (
      SELECT * FROM Table2
      WHERE Table1.ColumnC = Table2.ColumnC AND Table1.ColumnA = Table2.ColumnB)

答案 1 :(得分:0)

你在做什么

(SELECT ColumnA FROM Table1)
EXECPT 
(SELECT ColumnB FROM Table2
 WHERE Table1.ColumnC = Table2.ColumnC)

括号显示为什么它不起作用。

我对你想要达到的目标感到有些困惑。

TableA中ColumnA的所有内容都是TableA,其中ColumnA不在Table2.ColumnB和Table1.ColumnC中等于Table2.ColumnC?

SELECT ColumnA FROM Table
WHERE EXISTS (SELECT * FROM Table2 
              WHERE Table1.ColumnC = Table2.ColumnC
              AND Table1.ColumnA <> Table2.ColumnB)

答案 2 :(得分:0)

要修复查询错误,如果ColumnA和ColumnB的数据类型相同,则以下内容应运行正常。

SELECT ColumnA FROM Table1
EXCEPT
SELECT ColumnB FROM Table2

Except比较结果集。没有关于在某些列上连接结果集的概念。