如何在一个表的列中选择某些值,而另一表则不可用

时间:2018-11-21 03:46:25

标签: sql sql-server tsql

我有一个看起来像这样的表:

**A    B    C    D    E**
  1    2    3    4    5
  2    3    3    3    3
  3    4    5    6    7
  4    5    5    5    5

我还有另一个看起来像这样的表:

**F     G    H    I    J**
  1     4    7    8    6
  2     3    4    5    6
  5     1    5    7    8
  7     1    5    5    5

我将第一个表称为Table1,将第二个表称为Table2。

我目前正在做的是:

Select 
ts.B
from Table1 ts, Table2 tt
WHERE ts.A = tt.F
and NOT IN (Select tt.F from tt)

因此,基本上,我要加入Table1的A和Table2的F。我发现不在A中但不在F中的值。然后我想返回与那些A值相对应的B值。 / p>

我遇到错误:

Incorrect syntax near the keyword 'IN'.

我该如何解决?

4 个答案:

答案 0 :(得分:2)

像这样尝试...

SELECT 
    t1.B
FROM
    dbo.Table1 t1
WHERE 
    NOT EXISTS (
        SELECT 1
        FROM dbo.Table2 t2
        WHERE t1.A = t2.F
        )

答案 1 :(得分:1)

您可以简单地执行以下操作:

SELECT ts.B
FROM table1 ts
LEFT JOIN table2 tt ON ts.A = tt.F
WHERE ts.A IS NULL;

答案 2 :(得分:0)

Select 
ts.B
from Table1 ts, Table2 tt
WHERE ts.A = tt.F
and NOT IN (Select tt.F from tt)

在上面的查询中

  

不参加   条款已被使用,但未包括表中的结果列。

ColumnName NOT IN (Select tt.F from tt)

您可以使用Left / Right外部连接子句,并在where子句的相应列中检查NULL值。

答案 3 :(得分:0)

出于记录,您的查询在这里是错误的:

WHERE ts.A = tt.F
and NOT IN (Select tt.F from tt)

您已经提到ts.A的事实并不意味着解析器“记住”它。当涉及到and NOT IN时,它不知道哪件事不应该进入。至少,正确的方法是:

WHERE ts.A = tt.F
and ts.A NOT IN (Select tt.F from tt)