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的结果一样
你可以尝试这样的事情.
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上有点生疏,所以拿出我说过的话,加盐.
你可以用一个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)