2014-12-15 2 views
2

주문 세부 정보를 반환하는 쿼리가 있습니다. 찾은 거래에 대한 briisk 테이블의 정보가 필요합니다. briisk 테이블에 아무 것도없는 경우에도 명령을 표시하려고합니다.
마지막 줄 (및 flostream.briisk.master = "")을 추가하면 내 쿼리는 2 대신 하나의 결과 만 반환합니다. 당신이 left outer join를 사용하는 경우SQL/Bigquery JOIN이있는 레코드를 모두 가져올 수 없습니다.

SELECT * 
FROM (SELECT orderno,ifnull(dealid,sales_rule) as DealIDCombo from flostream.orders left join mobileheads.surveys on mobileheads.surveys.order_number = flostream.orders.externalreference) as first 
INNER JOIN flostream.orders on first.orderno = flostream.orders.orderno 
LEFT JOIN flostream.briisk on first.dealidcombo = flostream.briisk.uniquereference 
WHERE first.orderno in (359692,359683) 
//AND flostream.briisk.master = "" 

답변

2

는, 당신은 on 절에서 두 번째 테이블에 필터 조건을 포함해야합니다. 따라서 이것을 시도하십시오 :

SELECT * 
FROM (SELECT orderno,ifnull(dealid,sales_rule) as DealIDCombo 
     from flostream.orders left join 
      mobileheads.surveys 
      on mobileheads.surveys.order_number = flostream.orders.externalreference 
    ) as first INNER JOIN 
    flostream.orders 
    on first.orderno = flostream.orders.orderno LEFT JOIN 
     flostream.briisk 
    on first.dealidcombo = flostream.briisk.uniquereference AND 
     flostream.briisk.master = "" 
WHERE first.orderno in (359692, 359683) 

첫 번째 테이블의 조건은 WHERE 절에 있어야합니다.

+0

고든이 3 초 만에 나를 때렸습니다. 그가 맞다면, 왼쪽 Join Argument에 and 문을 추가하십시오. – hoggkm

+0

Ooohhhh 알겠습니다! 이 오류가 나타납니다. 쿼리 실패 오류 : ON 절은 각 테이블의 한 필드 이름과 그 테이블 이름 앞에 접두사가 붙은 모든 필드 이름의 AND =이어야합니다. 어떤 아이디어? –

+0

안녕 얘들 아, 내가 왼쪽 필터에 모든 필터를 추가했는데 별칭으로 참조했다. LEFT JOIN (flostream.briisk.uniquereference를 flostream.briisk에서 선택하십시오. flostream.briisk.master = "")로 BR first.dealidcombo = BR.uniquereference에 감사합니다! –

관련 문제