【发布时间】: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语句应该选择哪家公司?
-
我更新了我的帖子以更好地解释