Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 合并两个查询,但不将水平查询作为垂直查询_Mysql_Sql - Fatal编程技术网

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

也许我需要更复杂的查询。