连接表时H2数据库重复行

Posted

技术标签:

【中文标题】连接表时H2数据库重复行【英文标题】:H2 database duplicate row when joining table 【发布时间】:2016-10-10 19:23:22 【问题描述】:

在 H2 数据库 SQL 中,在不加入表的情况下,以下查询输出一行:

SELECT NAME as Product,DATE,RATE,QTY FROM BILL WHERE DATE LIKE '%9-10-2016'

但在 H2 数据库中,当加入另一个数据库时,它会输出额外的 3 行:

select BILL.NAME as product,
       COMPANY.NAME AS Company,
       BILL.DATE as ddate,
       BILL.RATE as rate,
       BILL.QTY as quantity 
FROM BILL INNER JOIN COMPANY ON BILL.DATE LIKE '%9-10-2016'

注意 - “公司”列从该数据库中为重复行选择随机名称。

我在这里做错了什么?我认为问题出在连接表上。但我自己想不通!

更新: 也许我错过了另一个要加入的名为“ITEM”的表,其中插入了“BILL.NAME”数据。在“ITEM”表中有一个名为“COMPANY_ID”的列,它引用了“COMPANY”表的“ID”列。

这是我对查询的新想法,但结果相同:

select BILL.NAME as product,
   COMPANY.NAME AS Company,
   BILL.DATE as ddate,
   BILL.RATE as rate,
   BILL.QTY as quantity FROM BILL INNER JOIN COMPANY ON COMPANY.ID=ITEMS.COMPANY_ID INNER JOIN ITEMS WHERE BILL.DATE LIKE '%9-10-2016';

在数据库中我有 3 个表 1. 账单 2.项目 3. 公司

BILL 表有以下列:

billno,batch,product_name,qty,rate.

此 BILL 表用于保存销售发票详细信息。

ITEM 表有以下列:

product_name,batch,qty,rate,expire_date,company_id

此 ITEM 表用于存储我从公司购买的产品。

COMPANY 表有以下列:

id,name,address,cell

此公司表用于存储公司详细信息。并加载到 javafx 组合框。如果选择了一个,它会自动从 COMPANY 表中获取 ID 并插入到 ITEM.COMPANY_ID 中。

好吧,现在我需要设计一个查询来从 BILL 表中获取销售历史记录。另外作为额外的信息,我想显示哪个公司的产品已经售罄。

希望你们现在能够帮助我!

【问题讨论】:

对不起,没找到你!连接查询应该只输出一行作为没有连接的第一个查询。 您的联接子句仅选择具有给定日期的所有账单,并且不涉及公司表中的任何数据。因此,对于每个具有指定日期的账单,您会在表中为每个公司获得一行。除了匹配日期之外,您可能还打算将 company 表中的某些内容与 bill 表中的某些内容相匹配? 换一种说法:你认为SQL语句应该选择哪家公司? 我更新了我的帖子以更好地解释 【参考方案1】:

您可能需要在 ON 子句中编写其他 JOIN 条件。 它应该包含一些链接表格(账单到公司)的键。

如果您的“bill”表中有 company_id,您的公司表查询中有“id”,则应如下所示

select BILL.NAME as product,COMPANY.NAME AS Company,BILL.DATE as ddate,BILL.RATE as rate,BILL.QTY as quantity
FROM BILL
INNER JOIN COMPANY ON bill.company_id = company.id
WHERE BILL.DATE LIKE '%9-10-2016'

【讨论】:

@rpo 现在我相信您应该使用 on 子句加入您的账单和项目:ON bill.product_name = item.product_name。并将您的 LIKE 子句移至 WHERE 在 BILL 中添加另一个公司 ID 后,它现在可能正在工作。 问题还没有解决!但现在我在 BILL 中有 company_id。

以上是关于连接表时H2数据库重复行的主要内容,如果未能解决你的问题,请参考以下文章

加入具有重复行数据的表时如何获得正确的 SUM()?

JOINing多对多表时避免SQL查询中的重复行

使用 Oracle SQL 从一个表插入到另一个表时如何避免重复行?

R的merge怎么出现很多行重复

“违反完整性约束:1062 重复条目”-但没有重复行

MySQL:内部连接时重复行