2011-06-11 5 views
0

주어진 날짜 이후에 주문을 기록하지 않은 제휴사를 반환하려고합니다. 이 쿼리를 통해 간단히 죽을 것입니다.SQL 두뇌 동결

select * from affiliate where 
idUser not in ( 
    select idAffiliate from Orders 
    where orderDate > '06/01/11' 
) 

제휴 테이블에는 Orders 테이블의 idAffiliate에 대한 외래 키인 idUser 필드가 있습니다. 이 달 초부터 주문이없는 수십 개의 계열사를 보유하고 있음에도 불구하고 위의 내용은 기록을 반환하지 않습니다. '07/01/11 '로 날짜를 변경하면 모든 제휴사 기록이 반환되지만 (분명히), 다른 항목이 없다면 올바른 법인 이름을 사용하고 있는지 확인합니다.

가 많이 중첩 된 쿼리에 idUser에 idAffiliate을 변경해야합니다 같은

+0

유형 문자열의 주문일은? 만약 그렇다면 당신은 ansi 날짜 형식을 사용해야한다고 생각합니다. YYYYMMDD. – NickD

+0

날짜가 YY/MM/DD (또는 이상한 형식)로 분석되고 있습니까 –

+0

날짜는 'smalldatetime'입니다. 예 : 2008-01-28 15:06:00 – justSteve

답변

4

이 보이는 감사합니다. 그리고보다 효율적으로 사용이 존재 또는 NOT이 왼쪽을 사용하여 이러한 경우

select * from affiliate a 
where not exists ( 
    select 1 from Orders where orderDate > '06/01/11' 
    and Orders.idUser = a.idUser 
) 
+0

감사 정보 - 보관 용으로 ... 'Orders.idAffiliate = a.iduser'여야합니다. – justSteve

0

대신 IN 존재합니다 가입 :

select a.* 
from affiliate a 
left join Orders o 
    on a.idUser= o.idAffiliate 
    and o.orderDate > '06/01/11' 
where o.idAffiliate is null