2015-01-23 2 views
0

고객으로부터 가장 최근의 구매 또는 포기 정보를 선택하고 Where 문에 오류 메시지가 표시됩니다.Where 내부 참여 선언문

SELECT Orders.EMAILADDRESS as EMAILADDRESS, [All Productions].REGIONID, [All Productions].EVENTTYPE, [All Productions].EVENTCATEGORY, [All Productions].EVENTNAME 
FROM Orders INNER JOIN [All Productions] 
WHERE Orders.ORDERDATE = (
    Select MAX(Orders.ORDERDATE) 
    FROM Orders 
    GROUP BY EMAILADDRESS 
) 
ON Orders. PRODUCTIONID = [All Productions].PRODUCTIONID 

UNION 
SELECT Carts.EMAILADDRESS as EMAILADDRESS, [All Productions].REGIONID, [All Productions].EVENTTYPE, [All Productions].EVENTCATEGORY, [All Productions].EVENTNAME 
FROM Orders INNER JOIN [All Productions] 
WHERE Carts.ABANDONDATE = (
    Select MAX(Carts.ABANDONDATE) 
    FROM Carts 
    GROUP BY EMAILADDRESS 
) 
ON Carts.ABANDONDID = [All Productions].PRODUCTIONID 
+1

오류 메시지 란 무엇입니까? – johnny

+1

아마도 WHERE 절에 사용 된 하위 쿼리는 여러 결과를 반환합니다. –

+0

사용중인 데이터베이스에 질문에 태그를 지정해야합니다. 어떤 데이터베이스를 사용하고 있습니까? –

답변

1

첫 번째 문제는 onwhere가는 점이다 (onfrom 절 부분이고 where 절은 다음 절 from). 따라서 쿼리 구조가 올바르지 않습니다.

구문을 수정하더라도 두 번째 문제점이 있습니다. 부질의 결과가 하나 이상의 행을 반환하기 때문에 쿼리는 오류를 반환합니다.

SELECT o.EMAILADDRESS as EMAILADDRESS, ap.REGIONID, 
     ap.EVENTTYPE, [All Productions].EVENTCATEGORY, 
     ap.EVENTNAME 
FROM Orders as o INNER JOIN 
    [All Productions] as ap 
    ON o.PRODUCTIONID = ap.PRODUCTIONID 
WHERE o.ORDERDATE = (Select MAX(o2.ORDERDATE) 
        FROM Orders as o2 
        WHERE o2.EMAILADDRESS = o.EMAILADRESS 
        ); 
2

SELECT Orders.EMAILADDRESS AS EMAILADDRESS, 
     [All Productions].REGIONID, 
     [All Productions].EVENTTYPE, 
     [All Productions].EVENTCATEGORY, 
     [All Productions].EVENTNAME 
FROM Orders 
     INNER JOIN [All Productions] 
       ON Orders. PRODUCTIONID = [All Productions].PRODUCTIONID 
     JOIN (SELECT Max(Orders.ORDERDATE) ORDERDATE, 
        EMAILADDRESS 
      FROM Orders 
      GROUP BY EMAILADDRESS) B 
     ON Orders.ORDERDATE = B.ORDERDATE 
      AND Orders.EMAILADDRESS = b.EMAILADDRESS 
UNION 
SELECT Carts.EMAILADDRESS AS EMAILADDRESS, 
     [All Productions].REGIONID, 
     [All Productions].EVENTTYPE, 
     [All Productions].EVENTCATEGORY, 
     [All Productions].EVENTNAME 
FROM Orders 
     INNER JOIN [All Productions] 
       ON Carts.ABANDONDID = [All Productions].PRODUCTIONID 
     JOIN (SELECT Max(Carts.ABANDONDATE),EMAILADDRESS 
      FROM Carts 
      GROUP BY EMAILADDRESS) b 
     ON b.ABANDONDATE = Carts.ABANDONDATE 
      AND Orders.EMAILADDRESS = b.EMAILADDRESS 
+0

두 개 이상의 전자 메일 주소가있는 경우 오류가 발생합니다. –

+1

@RonSmith - 네가 그룹을 놓쳤습니다. 지금 업데이트 됨 –

0

당신은 최신 날짜를 얻기 위해 row_number 기능을 사용할 수있는 where 절 앞에 와야한다 ON 조건을 가입 : 첫 번째는 당신이 첫 번째 하위 쿼리와 함께 일을하려고하는 것 같다 것입니다 각 그룹에 대해 :