从SQL Server中的另一个查询中减去查询

时间:2014-11-14 13:47:01

标签: sql sql-server

一个简单的问题,一直在轰炸我的脑袋。

我有以下两个问题:

select * from alm_existencias_almacen where id_warehouse = 3

select * from alm_existencias_almacen where id_warehouse = 8

我希望获得仓库3中但不在仓库8中的项目的结果,而不是仓库8中的项目,而不是仓库3中的项目。

事情是物品可能在两件商品中我可能会遇到以下情况:

id_warehouse id_color id_design
---------------------------------
8            RED      STYLISH
3            RED      NEW_AGE

所以在这种情况下我想检索一个空集。

如果它只是在商品8中,它将仅返回第3行中的第一行和相反的行。

这看起来很简单,但我一直都是这样,没有结果。我试过

select * 
from alm_existencias_almacen 
where id_color not in (select * 
                       from alm_existencias_almacen 
                       where id_almacen = 3) 
  and id_design not in (select * 
                        from alm_existencias_almacen 
                        where id_almacen = 3) 
  and id_almacen = 8;

但是发生错误。

提前致谢

2 个答案:

答案 0 :(得分:1)

你说得对,这很容易。

在wh 3中但不在8中,基于id_color:

select * from alm_existencias_almacen where id_warehouse = 3
and id_color not in
    (select id_color from alm_existencias_almacen where id_warehouse = 8)

答案 1 :(得分:1)

您可以使用设置操作Except

  

仓库3中但不在仓库8中的物料的结果

select * from alm_existencias_almacen where id_warehouse = 3
EXCEPT
select * from alm_existencias_almacen where id_warehouse = 8
  

谁是商品8而不是商品3

select * from alm_existencias_almacen where id_warehouse = 8
EXCEPT
select * from alm_existencias_almacen where id_warehouse = 3