繁体   English   中英

在函数中将 2 个表与“相同”主键组合

[英]Combining 2 Tables with the"Same" Primary Key in a function

我必须为我的数据库编写一个函数,以便从我的文章表中获取订单表中的价格。 我有 2 个物品表,1 个用于出租物品,1 个用于出售物品。 两个表都使用主键 ItemNo,Sales 从 ItemNo 1 开始,Rent 从 itemNo >=1000 开始。

我在下面为表格销售写了函数,它也可以工作。 我只是不确定现在如何组合这两个函数以从两个表中获取它。

我应该使用 if-case 并使用 if inItemNo>=1000 then 函数来编写 Rent 和 else Function Sales 函数还是应该使用 Join? 如果我应该使用连接,我不太确定如何正确使用它。 可能有人可以帮助我。

提前致谢

DELIMITER $$
create or replace function fn_PurchasingPrice(inItemNo int) returns int
begin
    declare OutPurchasingPrice int;
    set OutPurchasingPrice=(select ItemNo
                            from Sales 
                            where ItemNo= inItemNo);

    return ifnull(OutPurchasingPrice,-1);
END$$
DELIMITER ;

我认为我们有一个数据库设计问题。 以下是一些选项:

我的理解是,您需要一个简单地返回某物、租金或销售项目价格的函数。

这些项目在它们自己的表中存储了不同的项目编号 (PK)。 这意味着它们是不同的实体。 他们共享一个价格字段的事实并不意味着他们是相关的。 这意味着您可能想要:

  1. 分别对待它们,并有两个函数返回每个fn_SalePurchasingPricefn_RentPurchasingPrice的价格。
  2. 建立关系。
  3. 如果您真的不想要关系也不想要两个单独的函数(我不建议这样做),您可以将 2 个 PK 值传递给函数,每个表一个。 您可以像这样使用它: fnPurchasingPrice(6011, 3048)它将使用联合返回两个值。
   select price from table1 where table1_id = value1
   union select price from table2 where table2_id = value2

每个表中的项目数可以超过 1000,因此一个表的 PK 从 1000 开始这一事实是没有用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM