当前位置: 首页 > 知识库问答 >
问题:

希望防止MySQL内部联接两个表,在结果中给出不需要的行,Java摆动[重复]

刘骏祥
2023-03-14

亲爱的朋友们,我正在开发Java Swing项目,我有如下2个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 |
+------------+-----------+------------+-----------+-----+

表Availastock

+-----------+-----------+-----+
| Commodity | SalePrice | Qty |
+-----------+-----------+-----+
| A         |     150.0 |  25 |
| A         |     160.0 |  30 |
+-----------+-----------+-----+

这是我的Sql查询

String query = "SELECT Distinct Date,Purchse.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的结果是正确的。

但是,如果商品A的销售价为150,则有4个不同的进价,因此结果是4行对应于每个进价,导致总可保有量的误差。

谁来帮我得到想要的结果。

注:-实际上这个错误只发生在上表所示的那些进价不同而销售价相同的商品上。

共有1个答案

贡英华
2023-03-14

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

and (AvailStock.Commodity, AvailStock.SalePrice, Purchase.Date) in (
  select p.commodity, p.purchprice, max(date)
  from purchase p
  join availstock a on a.commodity = p.commodity 
                   and a.saleprice = p.purchprice
)                   

。。。并且distinction是不必要的。 你应该移除它。

 类似资料:
  • 问题内容: 我试图了解如何创建查询以基于内部联接过滤掉一些结果。 考虑以下数据: 我想选择project_id为1的所有composition_batch记录,并具有component_id为1或2的composition_batch_component。因此,我运行以下查询: 但是,这将返回重复的条目: 有没有一种方法可以修改此查询,以便仅获取与条件匹配的唯一composition_batch记

  • 我有以下两个表格: 我的代码是: 说明:表“预付款”为预付款表,“贷款”为贷款账户表。预付款可用于同一目的多次(此处用于购买产品)。每个预付款由预付款id标识。由于两个预付款用于相同的目的(此处用于购买产品),它们将具有相同的预付款id。另一方面,贷款是针对任何预付款进行的。贷款也可以采取多次对同一预付款。如果要偿还任何贷款,则会将其插入预付款id的“存款金额”列中。 在loan_page.php

  • 当运行多个内部连接时,我得到的结果为零 代码如下: 我知道这两个表中都有信息,这是奇怪的,它没有产生结果。 非常感谢任何帮助。

  • 问题内容: 我有两个表的列相似-假设表A的列为LABEL_A,表B的列为LABEL_B。LABEL_A和LABEL_B的数据类型相同。 如何在单个查询中从两个表中选择LABEL?(因此,查询结果包含单个列LABEL,该列包含两个表的LABEL列中的数据)。 编辑:我可以在游标中使用这样的UNION查询吗? 感谢您的回答。 问题答案: 使用: 会更快,但是如果存在重复项,则不会删除重复项。如果要删除

  • 我有以下实体, 我需要获得所有与公司签订公司ID 45协议的人员。下面是我编写的用于获取详细信息的本机查询。 但我被告知将其转换为JPA实体查询。我想出了以下内容, 但这给了我以下例外, 原因:org.hibernate.hql.internal.ast。QuerySyntaxException:连接路径应为![在org.hibernate.hql.internal.ast.QuerySyntax

  • 你好,我希望你们能帮我解决一个困扰我几天的问题。当我将脚本的结果导出到csv文件时,我无法得到正确的输出。

  • 问题内容: 我有两个要连接的表。 TABLE_A: TABLE_B: RESULT_TABLE: 我试图使用这样的东西: 但是,结果仅包括该列存在于TABLE_A中的行。 有没有办法连接TABLE_A和TABLE_B以产生RESULT_TABLE中显示的结果? 问题答案: 如果要获得所有结果,则需要一个 外部 联接,而不是一个 内部 联接。(内部仅返回匹配的行;外部返回所有行,其中匹配的行“缝合在

  • 我对MySQL和PHP非常陌生,我正在努力处理两个表之间的内部连接。我正在构建一个脚本,它读取一个os商务数据库,并告诉我哪些产品当前处于过期订单状态。为了使产品处于过期订单状态,products_attributes表中的值设置为'134',但是它只读取product_id,而不读取'products'表中的product_model。 我想在products_attributes表中选择值为'