Я хочу объединить два запроса как вертикальные, чтобы обычно не использовать параметры объединения.
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
Out: query1
colum name | Code | Name | Category | Brand | PrivateDiscount |
1.row _____ | ssff3 | adcdd | affcdcddd | assfdd | %6 |
2.row _____ | scf3 | adcdd | affcdcddd | assfdd | %6 |
Из: query2
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 |
В результате должна быть колонка «PublicDiscount», рядом с колонкой «PrivateDiscount», как это можно сделать?
3 ответа
Просто присоединитесь к таблице Скидки дважды:
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;
Я не совсем уверен, но мне кажется, что вы хотите получить столько строк в окончательном наборе результатов, сколько есть публичных скидок. Это типичное использование 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
Присоединяйтесь к таким запросам: [Обратите внимание, что я использовал 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;
Надеюсь, это сработает, спасибо.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.