联合两个查询但不是水平垂直

时间:2015-02-17 11:28:01

标签: mysql sql

我想将两个查询合并为垂直,因此通常不使用union参数。

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

出:QUERY1

列名称:|代码|名称|类别|品牌| PrivateDiscount |

1.row _____:| ssff3 | adcdd | affcdcddd | assfdd | %6 |

2.row _____:| scf3 | adcdd | affcdcddd | assfdd | %6 |


出:QUERY2

列名称:| PublicDiscount |

1.row _____:| %2 |

2.row _____:| %3 |


我想要这个结果:

列名称:|代码|名称|类别|品牌| PrivateDiscount | PublicDiscount |

1.row _____:| ssff3 | adcdd | affcdcddd | assfdd | %6 | ________ | %2 |

2.row _____:| scf3f | adcdd | affcdcddd | assfdd | %6 | ________ | %3 |


因此,应该是列" PublicDiscount",在列" PrivateDiscount"旁边。 怎么可以呢?

3 个答案:

答案 0 :(得分:1)

只需加入折扣表两次:

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;

答案 1 :(得分:0)

加入这样的查询: [请注意,我使用ProductId作为主键,请将其替换为Products table]的实际主键字段名称

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;

希望这会有效,谢谢。

答案 2 :(得分:0)

我不太确定,但在我看来,你想在最终结果集中获得与公共折扣一样多的行。这将是CROSS JOIN的典型用法:

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
相关问题