Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
想要防止MySQL内部连接两个表,在结果JavaSwing中产生不需要的行吗_Mysql_Inner Join - Fatal编程技术网

想要防止MySQL内部连接两个表,在结果JavaSwing中产生不需要的行吗

想要防止MySQL内部连接两个表,在结果JavaSwing中产生不需要的行吗,mysql,inner-join,Mysql,Inner Join,亲爱的朋友们,我正在开发JavaSwing项目,我有两个Mysql表,如下所示 表格购买 +------------+-----------+------------+-----------+-----+ | Date | Commodity | PurchPrice | SalePrice | Qty | +------------+-----------+------------+-----------+-----+ | 2020-06-10 | A |

亲爱的朋友们,我正在开发JavaSwing项目,我有两个Mysql表,如下所示

表格购买

+------------+-----------+------------+-----------+-----+
|    Date    | Commodity | PurchPrice | SalePrice | Qty |
+------------+-----------+------------+-----------+-----+
| 2020-06-10 | A         |        123 |     150.0 |  15 |
| 2020-06-12 | A         |        125 |     150.0 |  25 |
| 2020-06-14 | A         |        120 |     150.0 |  30 |
| 2020-06-16 | A         |        124 |     150.0 |  35 |
| 2020-06-18 | A         |        126 |     160.0 |  40 |
+------------+-----------+------------+-----------+-----+
表有效库存

+-----------+-----------+-----+
| Commodity | SalePrice | Qty |
+-----------+-----------+-----+
| A         |     150.0 |  25 |
| A         |     160.0 |  30 |
+-----------+-----------+-----+
这是我的Sql查询

String query = "SELECT Distinct Date,Purchase.Commodity,AvailStock.Commodity, "
        PurchPrice,Purchase.SalePrice,AvailStock.SalePrice,AvailStock.Qty "
        + "From AvailStock "
        + "Inner Join Purchase "    
        + "On Purchase.SelePrice = AvailStock.SalePrice "
        + "And Purchase.Commodity = AvailStock.Commodity "
        + "Where Commodity =? "
        + "And AvailStock.Qty!=0 ";
它给出了以下结果

+------------+-----------+------------+-----------+-----+
|    Date    | Commodity | PurchPrice | SalePrice | Qty |
+------------+-----------+------------+-----------+-----+
| 2020-06-10 | A         |        123 |       150 |  25 |
| 2020-06-12 | A         |        125 |       150 |  25 |
| 2020-06-14 | A         |        120 |       150 |  25 |
| 2020-06-16 | A         |        124 |       150 |  25 |
| 2020-06-18 | A         |        126 |       160 |  30 |
+------------+-----------+------------+-----------+-----+
它给出了一个夸大的数量输出

我想要下面的结果

+------------+-----------+------------+-----------+-----+
|    Date    | Commodity | PurchPrice | SalePrice | Qty |
+------------+-----------+------------+-----------+-----+
| 2020-06-16 | A         |        124 |       150 |  25 |
| 2020-06-18 | A         |        126 |       160 |  30 |
+------------+-----------+------------+-----------+-----+
尝试了左连接和右连接,但没有内部连接,结果都是一样的

这里的问题是商品A有两个销售价格。即150和160。在这160个国家中,只有一个国家的价格。因此,对于销售价格为160的商品A,结果是正确的

但对于销售价格为150的商品A,有4个不同的购买价格,因此结果中,对应于每个购买价格的4行出现,从而导致总可用数量的错误

有人请帮我得到想要的结果


注意:-实际上,此错误仅发生在购买价格不同但销售价格相同的商品上,如上表所示。

如果您只想填写最后一个订单,则需要过滤掉所有“旧”行。可以通过在
WHERE
子句中添加以下额外条件来完成此操作:

SELECT Date,AvailStock.Commodity,
        AvailStock.SalePrice,PurchPrice,AvailStock.Qty
From Purchase
Inner Join AvailStock   
        On Purchase.SalePrice = AvailStock.SalePrice 
        And Purchase.Commodity = AvailStock.Commodity 
Where AvailStock.Commodity ='A'
        And AvailStock.Qty!=0
        and (AvailStock.Commodity, AvailStock.SalePrice, Purchase.Date) in (
  select p.Commodity, p.SalePrice, max(date)
  from Purchase p
  join AvailStock a on a.Commodity = p.Commodity 
                   and a.SalePrice = p.SalePrice
  group by p.Commodity, p.SalePrice
)           
根据性能进行编辑

以下索引理论上可以提高此查询的性能:

create index ix1 on AvailStock (Commodity, Qty);

create index ix2 on Purchase(Commodity, SalePrice, Date);

create index ix3 on AvailStock (Commodity, SalePrice);

我不懂逻辑。你能解释一下你想要得到什么结果吗?商品=?后面不应该有空格吗?或者这无关紧要吗?亲爱的穿刺者,我已经给出了最后一个表所需的结果。亲爱的草莓,我已经编辑了查询并添加了空格。似乎你只想填写最后一个订单。这就是你想要的吗?亲爱的穿刺者Max(date)在一般情况下不会解决问题,因为这里的问题是商品A有两个销售价格。即150和160。在这160个国家中,只有一个国家的价格。因此,对于销售价格为160的商品A,结果是正确的。但如果商品A的销售价格为150,则有4个不同的购买价格,因此结果中的4行对应于每个购买价格,导致结果中的总可用数量出现错误,这与您给定的附加条件有关。但是得到一个SQL异常“未选择数据库”。还尝试将最后一个p.purchprice更改为p.saleprice。您的列名和查询不一致。请将您的示例添加到“好的,我会这样做”中。这是指向db fiddle的链接