Mysql与Case连接

标签 mysql

我有两个表 sales 和 sale_taxes

表:销售额

sale_id  | sale_cost | sale_discount | sale_tax  | sale_total 
-------------------------------------------------------------
131      |   30      |      10       |   3       |   23

表:sale_taxes,存储税收细目

sale_tax_id  | sale_id   | tax_id | tax_percent | tax_amount  
-------------------------------------------------
1211         |  131      | 1    |      10     |   2
1332         |  131      | 2    |      5      |   1

其中,tax_id 1 代表增值税,2 代表服务税。

我需要有关获取结果的查询帮助

sale_id  | sale_cost | sale_discount | sale_tax  | sale_total | VAT | Service Tax
---------------------------------------------------------------------------------
131      |   30      |      10       |   3       |   23       | 2   |      1

最佳答案

假设我正确理解你的问题,有几个选项可以做到这一点。一种是将表多次连接:

select s.sale_id, s.sale_cost, s.sale_discount, s.sale_tax, s.sale_total,
      st1.tax_amount as vat,
      st2.tax_amount as service_tax
from sales s
    left join sales_taxes st1 on s.sale_id = st1.sale_id and st1.tax_id = 1
    left join sales_taxes st2 on s.sale_id = st2.sale_id and st2.tax_id = 2

如果数据可能存在也可能不存在,请使用外连接。如果您知道两条记录都存在,则可以使用内部联接

<小时/>

这是使用条件聚合的替代方法:

select s.sale_id, s.sale_cost, s.sale_discount, s.sale_tax, s.sale_total,
      max(case when st.tax_id = 1 then st.tax_amount end) as vat,
      max(case when st.tax_id = 2 then st.tax_amount end) as service_tax
from sales s
    left join sales_taxes st on s.sale_id = st.sale_id
group by s.sale_id

但我相信第一种方法会更有效。

关于Mysql与Case连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583021/

相关文章:

java - 空指针异常无法修复

mysql - 如何才能不删除表格中的最后一项?

mysql - 将更新从 mysql 转换为 oracle

mysql - 有什么方法可以判断 MySQL 查询需要多长时间才能运行?

mysql - 如何在 IN 子句 sql 中使用限制

mysql - 新 mysql 表中的高开销

php - 我如何在同一页面上有超过 1 个 MySQL UPDATE 查询?

mysql - 动态减去一个数

php - 在提交表单时,勾选会终止应用程序。但仅限于生产

mysql - 如何根据特定数据进行 order_by