7

我有两个表,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 |
   ------

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

| 乙|

  1. | 抄送|
  2. | 呃 |
4

3 回答 3

8

你可以试试这样的。

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

据我所知,您无法正常工作的原因是您获得了 table1 和 table2 中的所有值。你应该做的就像我上面做的一样。获取两个表中的所有值并检查两个表中的哪些值不在结果集中,这就是我设置子查询的原因。我对我的 SQL 有点生疏,所以请接受我所说的话。

于 2013-01-28T03:04:00.923 回答
7

您可以使用outer joinandwhere子句来做到这一点。在这种情况下,我认为是右外连接:

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
于 2013-01-28T02:44:56.683 回答
1
SELECT DISTINCT b.cGenotype
FROM  dbo.CombinedData b 
WHERE NOT EXISTS (SELECT * 
                  FROM dbo.TestResults a 
                  WHERE a.TestResult = b.cGenotype)
于 2013-01-28T02:44:55.233 回答