具有不同行名的SQL INNER JOIN表

时间:2019-06-08 04:45:27

标签: sql inner-join where

感谢您抽出宝贵的时间阅读本文档,这可能是一个非常基本的问题。对于INNER JOIN运算符,我所做的大多数搜索查询似乎都更深入。

基本上我的问题是:我有一个发货和收货表,上面有该物品发货或收货的日期。在发货表(tbl_shipping)中,日期行标记为trans_out_date,对于接收表(tbl_receiving),日期行标记为trans_in_date

我可以从用户输入的表单中查看在任一表上设置的交易,但是我想用从符合条件的两个表中提取的信息填充表。即。如果接收表在4月完成10笔交易,在6月完成5笔交易,而发货表在4月完成15笔交易,6月完成10笔交易...当用户希望查看6月份的所有交易时,它将填充发生在6月份的15笔交易。六月。

截至目前,我只能从1张桌子中拉出

SELECT * 
FROM tbl_shipping 
WHERE trans_out_date >= ‘from_date’ 
  AND trans_out_date <= ‘to_date’

这是我想要达到的目标的合适语法吗?

SELECT * 
FROM tbl_shipping 
INNER JOIN tbl_receiving ON tbl_shipping.trans_out_date = tbl_receiving.trans_in_date 
WHERE 
    tbl_shipping.trans_out_date >= ‘from_date’ 
    AND tbl_shipping.trans_out_date <= ‘to_date’

再次感谢您阅读此内容。

1 个答案:

答案 0 :(得分:0)

您似乎想要union all而不是join

SELECT s.item, s.trans_out_date as dte, 'shipped' as which
FROM tbl_shipping S
WHERE s.trans_out_date >= ? AND 
      s.trans_out_date <= ?
UNION ALL
SELECT r.item, NULL, r.trans_in_date as dte, 'received'
FROM tbl_receiving r
WHERE r.trans_out_date >= ? AND 
      r.trans_out_date <= ?
ORDER BY dte;

注意:

  • JOIN可能会因数据丢失(因为日期未对齐)或数据重复(由于有多个日期)而导致问题。
  • ?用于参数。如果要从应用程序中调用此参数,请使用参数!
  • 您可以在结果集中添加其他列以获取更多信息。

这可能不是您想要的确切结果格式。如果不是,请询问另一个有关样本数据和所需结果的问题。