Sql 通过sem选择两个表之间不匹配的行

Sql 通过sem选择两个表之间不匹配的行,sql,join,sql-server-2012,Sql,Join,Sql Server 2012,我有两张桌子,表一和表二。我想在表2中选择表1中未包含的不同行。以下是一个例子: Table1 | A | | sem| ------------------ 1. | aa | | 1 | --------------- 2. | bb | | 1 | ---------------- 3. | aa | | 2 | ----------------- 4. | cc | | 2 | ---------------

我有两张桌子,表一和表二。我想在表2中选择表1中未包含的不同行。以下是一个例子:

  Table1        

   | A  |   | sem|
   ------------------
1. | aa |   | 1 |
   ---------------
2. | bb |   | 1 |
   ----------------
3. | aa |   | 2 |
   -----------------
4. | cc |   | 2 |
   ---------------

Table2

   | B  |
   ------
1. | aa |
   ------
2. | aa |
   ------
3. | bb |
   ------
4. | cc |
   ------
5. | cc |
   ------
6. | ee |
   ------
7. | ee |
   ------
当sem=1时,我想要这两个表中不常见的行 喜欢 sem的输出=1 结果

|B|
  • |抄送|
  • |ee|

  • 您可以使用
    外部联接
    where
    子句来实现这一点。在这种情况下,右外连接,我认为:

    SELECT cd.cGenotype
    FROM  dbo.TestResults tr right outer join
          dbo.CombinedData cd
          ON (tr.TestResult = cd.cGenotype)
    where tr.testresult is null
    GROUP BY cd.cGenotype
    

    你可以试试这样的

    SELECT B
    FROM Table2 b
    WHERE NOT EXISTS (
        SELECT *
        FROM Table1 a
        WHERE a.A = b.B)
    

    从我所能收集到的信息来看,你的不起作用的原因是因为你得到了表1和表2中的所有值。你应该做的和我上面做的一样。获取两个表中的所有值,并检查两个表中的哪些值不在结果集中,这就是我设置子查询的原因。我的SQL有点生疏了,所以请对我所说的话稍加保留。

    谢谢,这很有效。我期待着有一天我在t-sql和你一样优秀。
    SELECT B
    FROM Table2 b
    WHERE NOT EXISTS (
        SELECT *
        FROM Table1 a
        WHERE a.A = b.B)