连接表时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数据库重复行的主要内容,如果未能解决你的问题,请参考以下文章