从另一个表中减去一个表

时间:2014-05-19 09:27:07

标签: sql database

我有两个表有两个不同的select语句。这些表只包含一列。我想从table2中的table1行中减去apple apple orange 行中的行一次。换句话说:我只想删除一次,而不是全部。

表1:

apple
pear

表2:

apple
orange

结果:

{{1}}

3 个答案:

答案 0 :(得分:2)

基本上是FYI如果A={A,A,O},B={A,P}那么A-B在逻辑上是

select * from t1 except select * from t2

试试这个!

create table #t(id varchar(10))
create table #t1(id1 varchar(10))
insert into #t values('apple'),('apple'),('orange')
insert into #t1 values('apple'),('pear')


select * from
(
select *,rn=row_number()over(partition by id order by id) from #t
except
select *,rn1=row_number()over(partition by id1 order by id1) from #t1
)x

SEE DEMO

答案 1 :(得分:0)

以下是Oracle dbms的答案。诀窍是为每个水果编号记录,以便获得苹果1,苹果2等。然后减去这些组以留在苹果2中,而苹果1被移除。 (row_number函数需要一个对我们来说不重要的排序顺序,但我们必须出于语法原因指定它。)

select fruit
from
(
  select fruit, row_number() over (partition by fruit order by fruit)
  from table1
  minus 
  select fruit, row_number() over (partition by fruit order by fruit)
  from table2
);

答案 2 :(得分:-1)

我认为您无法通过单个SQL查询删除记录:

据我所知,您需要将数据库连接到编程语言,并需要编写如下算法:

for(all records in table2)
{
    if(record present in table1)
    {
        delete from table1 where record = (record in table2) limit 1;
    }
}