【问题标题】:MySql MINUS (opposite of intersaction)MySql MINUS(交叉口的对面)
【发布时间】:2016-06-03 10:27:27
【问题描述】:

我有两张桌子

  • inventory_lot_transactions 和
  • inventory_lot_serials

我正在按批次记录所有进出库存的交易。每个进出仓库的批次都有自己的批次序列号,这些序列号会为每次进出交易记录。

现在我想获取 X 仓库中仍然可用的所有序列号。基本上我想实现这一点:

SELECT serials FROM table_a where transaction_type=In
MINUS
SELECT serials FROM table_a where transaction_type=Out

我准备了两个 SQL fiddle:

  1. 这是进入一个仓库http://sqlfiddle.com/#!9/3a4ab/7的连续剧列表A
  2. 这是出库的连续剧列表Bhttp://sqlfiddle.com/#!9/3a4ab/8

基本上我想选择这个仓库中仍然可用的所有连续剧。例如。列表 A - 列表 B。

【问题讨论】:

  • 您有两次相同的查询,但一列的参数不同。这是否意味着如果它“未出”它就是“入”?

标签: mysql inventory


【解决方案1】:

不确定我是否理解正确,您应该可以在 where 条件中使用 NOT IN。 http://sqlfiddle.com/#!9/3a4ab/10

select IL.lot_id, ILS.serial_id 
from inventory_lot_serials ILS
left join inventory_lots IL ON IL.id=ILS.inventory_lot_id
where 
  IL.type='In' and 
  IL.warehouse_location_id=500
  AND ILS.serial_id NOT IN 
(SELECT ILS.serial_id 
    from inventory_lot_serials ILS
    left join inventory_lots IL ON IL.id=ILS.inventory_lot_id
    where 
      IL.type='Out' and 
  IL.warehouse_location_id=500)

【讨论】:

  • 哦,太容易了:)。我想了这么多,我忘了NOT IN :)
【解决方案2】:

可能使用 LEFT OUTER JOIN 来避免使用子查询:-

SELECT IL.lot_id, 
        ILS.serial_id 
FROM inventory_lots IL 
INNER JOIN inventory_lot_serials ILS ON IL.id = ILS.inventory_lot_id
LEFT OUTER JOIN inventory_lots ILO ON ILO.lot_id = IL.lot_id AND ILO.type = 'Out' AND ILO.warehouse_location_id = 500 
LEFT OUTER JOIN inventory_lot_serials ILSO ON ILO.id = ILSO.inventory_lot_id AND ILS.serial_id  = ILSO.serial_id
WHERE IL.type = 'In' 
AND IL.warehouse_location_id = 500
AND ILSO.inventory_lot_id IS NULL

这会对表中的库存进行内部连接(因为您只对有库存进来的记录感兴趣,不需要对此进行外部连接),然后是到库存输出表的 LEFT OUTER JOIN。然后 WHERE 子句丢弃在库存输出表中找到的项目。

这里的 SQL 小提琴:-

http://www.sqlfiddle.com/#!9/10c0a/8

【讨论】:

  • @PrimozRome - 做了一些小改动。给出相同的结果。如果没有子查询,我希望这会更快,尤其是在有大量数据的情况下
  • 现在它可以正常工作了,非常感谢。我将测试哪个更快,并相应地设置为接受的答案。
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2011-12-27
  • 2017-07-05
  • 2011-08-03
相关资源
最近更新 更多