Mysql加入案例

Mysql加入案例,mysql,Mysql,我有两张销售和销售税的桌子 表:销售额 sale_id | sale_cost | sale_discount | sale_tax | sale_total ------------------------------------------------------------- 131 | 30 | 10 | 3 | 23 表:存储税收细分的销售税 sale_tax_id | sale_id | tax_id |

我有两张销售和销售税的桌子

表:销售额

sale_id  | sale_cost | sale_discount | sale_tax  | sale_total 
-------------------------------------------------------------
131      |   30      |      10       |   3       |   23
表:存储税收细分的销售税

sale_tax_id  | sale_id   | tax_id | tax_percent | tax_amount  
-------------------------------------------------
1211         |  131      | 1    |      10     |   2
1332         |  131      | 2    |      5      |   1
其中,税号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

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

假设我正确理解了你的问题,有两种方法可以做到这一点。一种是多次将表连接到自身:

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

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

这两个表有什么关系?
sales
sale\u id
是否等于
sale\u tax
sale\u tax\u id
?通常,您需要一个字段来
将这两个表连接在一起。很抱歉,没有找到它。谢谢你的提问。请问你的桌子有什么关系?抱歉。已编辑。这两个表有何关联?
sales
sale\u id
是否等于
sale\u tax
sale\u tax\u id
?通常,您需要一个字段来
将这两个表连接在一起。很抱歉,没有找到它。谢谢你的提问。请问你的桌子有什么关系?抱歉。编辑。