SQL - 根据匹配记录集选择列数据

时间:2014-12-09 16:32:06

标签: sql database oracle oracle-sqldeveloper

帮我写一个sql,只有当第2列记录与表2完全相同时才需要选择表1的第1列数据

例: 表1

Column1 Column2
A        1
A        2
A        3
B        1
B        2
B        3
B        4

表2

Column1 Column2
A        1
A        2
A        3
A        4
B        1
B        2
B        3
B        4

我需要只看到第1列中的B,因为B的第2列数据与第2列完全匹配。

案例

表1     Column1 Column2     C 1     C 2     C 3     C 5 表2     Column1 Column2     C 1     C 2     C 3     C 4

虽然记录的数量与记录匹配但不应该考虑C

2 个答案:

答案 0 :(得分:0)

您可以使用外部join和聚合:

执行此操作
select t2.column1
from table2 t2 left join
     table1 t1
     on t2.column1 = t1.column1 and t2.column2 = t1.column2
group by t2.column1
having count(*) = count(t1.column1);

having子句确保原始数据中的所有行都匹配。这假定column2在任一表中的给定column1值都没有重复值。

答案 1 :(得分:0)

尝试这个:

select distinct col1 from t1
where col1 not in
(select col1 from
   (
     select t2.col1,t2.col2
     from t2
     minus
     select t1.col1,t1.col2
     from t1
   )
 )

不漂亮。但似乎工作。 SQLFiddle