检查查询中不同表中的相同条件

时间:2012-07-24 08:13:19

标签: mysql sql

我想在按产品分组的日期之前添加库存移动。我必须根据文档类型检查不同表中的日期。

基本上我有3种类型的动作:发票,无效发票和其他类型的文件。这些文件的信息分为3个表格:

  • 发票: DOCDATE,....
  • NULLED_INV: DOCDATE,....
  • 其他人: DOCDATE,....

然后我把所有的动作都放在另一张桌子里:

  • 移动PRODUCT_IDDOCDOC_TYPEQUANTITY ...)

所以我需要根据DOC_TYPE检查相应表格中的日期,以便合计一个动作的QUANTITY。例如,如果DOC_TYPE = 1然后检查DOCINVOICES的日期,如果DOC_TYPE = 2,则检查NULLED_INV中的日期以及DOC_TYPE = 3是否{}检查OTHERS中的日期,并按产品分组所有动作:

PRODUCT_ID TOTAL_MOVEMENTS_BEFORE_XXXX
1001       10
1002       25
...

如何进行此类查询?

我尝试在WHERE子句中使用IF,但它没有用。

1 个答案:

答案 0 :(得分:2)

UNION

应该可以实现最简单的解决方案
SELECT product_id, count(*) total_movements_before
FROM movements m
LEFT JOIN (
  SELECT doc, date
  FROM invoices
  UNION ALL
  SELECT doc, date
  FROM nulled
  UNION ALL
  SELECT doc, date
  FROM others
) sub
ON m.doc = sub.doc
WHERE sub.date < :beforedate
GROUP BY m.product_id

我必须补充一下,为什么不在列表中添加一个列来表示类型?invoices表?这样,您可以将三个表合并为一个,并且当您要从所有三个表中选择时不需要UNION(例如SELECT * FROM movements m LEFT JOIN invoices i ON m.doc = i.doc AND m.doc_type = i.doc_type