按sem选择两个表之间不匹配的行

les*_*rew 6 sql join sql-server-2012

我有两个表,Table1和Table2.我想在Table2中选择Table1中未包含的不同行.这是一个例子:

  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 |
   ------
Run Code Online (Sandbox Code Playgroud)

当sem = 1时,我想要那个在这两个表中不常见的行,就像sem = 1的结果一样

| B |

  1. | cc |
  2. | ee |

use*_*774 8

你可以尝试这样的事情.

SELECT B
FROM Table2 b
WHERE NOT EXISTS (
    SELECT *
    FROM Table1 a
    WHERE a.A = b.B)
Run Code Online (Sandbox Code Playgroud)

从我可以收集到的,你的工作不起作用的原因是因为你得到了table1和table2中的所有值.你应该做的就像我上面所做的那样.获取两个表中的所有值并检查两个表中的哪些值不在结果集中,这就是我设置子查询的原因.我的SQL上有点生疏,所以拿出我说过的话,加盐.


Gor*_*off 6

你可以用一个outer join和一个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
Run Code Online (Sandbox Code Playgroud)