问题描述
我正在编写一个SQL查询,该查询将使我能够找到在特定销售日期购买了某种产品的顾客,然后又在不同的日期范围内购买了其他产品的顾客。我想在from子句中使用子查询来搜索第一组客户中的第二组客户,但是我遇到了一些问题
我的主要问题是-在子查询中,我加入了几个不同的表。我需要在查询的最终where子句中引用这些连接表中的2个。我是否需要在子查询之外重新加入那些表?我尝试在最后一行中用subq。“ order date”和subq。“ sku”交换o。“ OrderDate”和ol。“ SKU”,因为那是我的表别名,但是没有运气。>
我可以为此使用子查询吗?
SELECT DISTINCT subq."FirstName",subq."LastName",subq."Email"
FROM (
SELECT DISTINCT o."FirstName",o."LastName",o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE p."DisplayName" LIKE '%varietal%'
AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
) AS subq
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020' AND ol."SKU" = 'Red312';
解决方法
我认为您实际上想要两个查询的交集...
SELECT DISTINCT o."FirstName",o."LastName",o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE p."DisplayName" LIKE '%varietal%'
AND o."OrderDate" BETWEEN '06/26/2020' AND '07/03/2020'
INTERSECT
SELECT DISTINCT o."FirstName",o."Email"
FROM flight_export_order o
JOIN flight_export_orderline ol
ON o."OrderDisplayID" = ol."OrderDisplayID"
JOIN flight_export_product p
ON ol."SKU" = p."SKU"
JOIN full_consultant_info fci
ON o."ConsultantDisplayID" = fci."ConsultantDisplayID"
WHERE o."OrderDate" BETWEEN '09/22/2020' AND '10/05/2020'
AND ol."SKU" = 'Red312';
Learn more about set operators like UNION,UNION ALL,INTERSECT and EXCEPT