【问题标题】:Select rows with no match between two tables by sem通过 sem 选择两个表之间不匹配的行
【发布时间】:2013-01-28 02:41:43
【问题描述】:

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

【问题讨论】:

    标签: sql join sql-server-2012


    【解决方案1】:

    你可以试试这样的。

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

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

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

      • 谢谢,这很有魅力。期待在t-sql和你一样优秀的那一天。
      【解决方案3】:
      SELECT DISTINCT b.cGenotype
      FROM  dbo.CombinedData b 
      WHERE NOT EXISTS (SELECT * 
                        FROM dbo.TestResults a 
                        WHERE a.TestResult = b.cGenotype)
      

      【讨论】:

        猜你喜欢
        • 2018-07-10
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 2017-12-16
        相关资源
        最近更新 更多