【问题标题】:How do I get prices of each invoices?如何获取每张发票的价格?
【发布时间】:2009-05-25 21:51:21
【问题描述】:

我正在开发一个每天处理大约 500 张发票的后端。我的数据库中有以下表格。

invoices
invoice_id int primary_key auto_increment
user_id varchar(10)
invoice_type enum { package, document }


users
user_id int primary_key auto_increment
rate_package_id int
rate_document_id int

rates
rate_id  int
rate_name  varchar(10)

rate_prices
price_id  int primary_key auto_increment
rate_id int
weight int
price double(8,2)

在一天结束时,我必须为每张发票设置价格。

如何获取每张发票的价格?我实际上没有 ieda,除了将“rate_package_id”和“rate_package_document_id”添加到发票表中,这样我就可以直接从 rate_prices 查询价格。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:
    SELECT  invoice_id, price
    FROM    invoices i
    JOIN    users u
    ON      u.user_id = i.user_id
    JOIN    rates r
    ON      r.rate_id = CASE WHEN i.invoice_type = package THEN u.rate_package_id ELSE u.rate_document_id END
    JOIN    rate_prices p
    ON      p.rate_id = r.rate_id
    

    不确定您将包裹的重量放在哪里。

    看来一定是invoices,在这种情况下只需将其添加到最后一个JOIN 条件。

    【讨论】:

    • Quassnoi // 谢谢!这是相当长的 sql 查询。
    • 这是一个很短的 SQL 查询。在 Oracle 中,我有不适合 VARCHAR2(32767) 的动态 SQL 查询,这是一个相当长的查询 :)
    • Quassnoi:没什么!当我还是个孩子的时候,我们不得不写这么长的查询,我们还在等待它们被优化! ;-)
    • 是的...我希望有一天我也能这么说。现在,这个查询对我来说很长。学习学习学习!
    • @Bill:嗯!我曾经在 2001 年将一个子查询嵌套得太深,以至于 2009 年的结果集现在只有一半!
    【解决方案2】:

    我假设您可能需要一个与发票关联的 LineItems 表,例如:

    lineitem_id int primary_key auto_increment
    invoice_id int
    price_id int
    quantity int
    total_price double(8,2)
    

    然后您有一个表格将价格与发票相关联,每张发票可以有 1 个或多个行项目。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2019-06-27
      • 2020-07-21
      • 2022-08-10
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      相关资源
      最近更新 更多