Mysql 合并两个查询,但不将水平查询作为垂直查询
我想将两个查询合并为垂直查询,所以通常不使用联合参数Mysql 合并两个查询,但不将水平查询作为垂直查询,mysql,sql,Mysql,Sql,我想将两个查询合并为垂直查询,所以通常不使用联合参数 select Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency, Unit, Template, F1, F2,P1, P2, DiscountPercent as PrivateDiscount from Products as p left join ProductTemplates as pt on pt.TemplateName
select
Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
Unit, Template, F1, F2,P1, P2, DiscountPercent as PrivateDiscount from
Products as p
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as d
on d.Brand = p.Brand and d.Status=1 and d.CustomerID='1198' and d.DiscountType=0
select DiscountPercent as PublicDiscount
from Products as p
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as d
on d.Brand = p.Brand and d.Status=1 and d.DiscountType=1
输出:查询1
colum name | Code | Name | Category | Brand | PrivateDiscount |
1.row _____ | ssff3 | adcdd | affcdcddd | assfdd | %6 |
2.row _____ | scf3 | adcdd | affcdcddd | assfdd | %6 |
输出:查询2
colum name | PublicDiscount |
1.row _____| %2 |
2.row _____| %3 |
我想要这个结果:
colum name : | Code | Name | Category | Brand | PrivateDiscount | PublicDiscount |
1.row _____ | ssff3 | adcdd | affcdcddd | assfdd | %6 | %2 |
2.row _____ | scf3f | adcdd | affcdcddd | assfdd | %6 | %3 |
因此,应该是“公共折扣”列,紧靠“私人折扣”列
如何才能做到这一点?像这样加入查询: [注意,我使用了
ProductId
作为主键,请将其替换为Products
表的实际主键字段名]
SELECT Code, Name, Category, SubCategory, p.Brand, Model, Price,
Currency, Unit, Template, F1, F2,P1, P2, PrivateDiscount, PublicDiscount
FROM
(
SELECT Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
Unit, Template, F1, F2,P1, P2, DiscountPercent as PrivateDiscount, p.ProductId from Products as p
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as d on d.Brand = p.Brand and d.Status=1 and d.CustomerID='1198' and d.DiscountType=0
) as tbl1
INNER JOIN
(
SELECT DiscountPercent as PublicDiscount, p.ProductId from Products as p
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as d on d.Brand = p.Brand and d.Status=1 and d.DiscountType=1
) as tbl2
ON tbl1.ProductId=tbl2.ProductId;
希望这能奏效,谢谢。只需加入折扣表两次:
select
Code, Name, Category, SubCategory, p.Brand, Model, Price, Currency,
Unit, Template, F1, F2,P1, P2,
privd.DiscountPercent as PrivateDiscount,
pupld.DiscountPercent as PublicDiscount
from Products as p
left join ProductTemplates as pt on pt.TemplateName=p.Template
left join Discounts as privd on privd.Brand = p.Brand and privd.Status=1 and privd.CustomerID='1198' and privd.DiscountType=0
left join Discounts as pupld on pupld.Brand = p.Brand and pupld.Status=1 and pupld.DiscountType=1;
我不太确定,但在我看来,您希望在最终结果集中获得与公共折扣一样多的行。这是交叉连接的典型用法:
select Code,
Name,
Category,
SubCategory,
p.Brand,
Model,
Price,
Currency,
Unit,
Template,
F1,
F2,
P1,
P2,
DiscountPercent as PrivateDiscount,
p.PublicDiscount
from Products as p
left join ProductTemplates as pt
on pt.TemplateName = p.Template
left join Discounts as d
on d.Brand = p.Brand
and d.Status = 1
and d.CustomerID = '1198'
and d.DiscountType = 0
cross join (
select DiscountPercent as PublicDiscount
from Products as p
left join ProductTemplates as pt
on pt.TemplateName = p.Template
left join Discounts as d
on d.Brand = p.Brand
and d.Status = 1
and d.DiscountType = 1
) as p
也许我需要更复杂的查询。