2013-05-15 1 views
2

원하는 결과를 생성하기 위해 1 개의 SQL 문을 사용하려고합니다. 나는, 질서와 고객의 이름이 개 테이블을 얻고, '집에서'= 0 다음 customers_name = customers_id 경우 주문 테이블에 가짜 customers_id가 존재입니다이일치하는 레코드가 없을 때 두 테이블 조인이 있습니다.

select a.*, b.customers_name 
from order a, customers b 
where a.customers_id=b.customers_id 
order by b.customers_name; 

내 문제처럼 쿼리를 사용하려고 그것은 cumstomers 테이블에 존재하지 않습니다. 이 회사에 가입하기 전에 이런 방식으로 사용되어 테이블을 전혀 수정할 수 없습니다.

결과를 표시하는 방법이 있습니까? 고객 이름이있는 주문 테이블의 모든 주문과 customers_id = 0 (< = 고객 테이블의 일치 레코드가없는 경우) customers_name = 'In House') 주문은 customers_name에 의해 정렬되어야합니다.

답변

2
select a.*, 
     COALESCE(b.customers_name, 'In House') as customers_name 
from 
    order a LEFT JOIN customers b ON a.customers_id=b.customers_id 
order by 
    customers_name; 

또는

select a.*, 
     CASE 
      WHEN a.customers_id = 0 THEN 'In House' 
      WHEN b.customers_name IS NULL THEN 'Unknown' 
      ELSE b.customers_name 
     END as customers_name 
from 
    order a LEFT JOIN customers b ON a.customers_id=b.customers_id 
order by 
    customers_name; 

어느 쪽이든은, 명시 적 명확성을 위해 가입 사용할 수 있습니다.

첫 번째는 "집에서"추가 고객 누락 어떤를 들어, 두 번째는 CustomerID를 당신은 이것에 대한 LEFT JOIN을 사용할 수 있어야 0

+0

왼쪽 결합이 사용되는 경우 order_date> = 5/01/2013과 같은 주문 테이블에 대해 몇 가지 조건을 추가하려면 어떻게해야합니까? – user1515848

+0

오, 알겠습니다. 빠른 응답을 보내 주셔서 감사합니다. – user1515848

1

하지 않으면 알 수없는 추가하여 실종 고객 다룬다.

select a.*, b.customers_name 
from order a 
left join customers b 
on a.customers_id = b.customers_id 
order by b.customers_name; 
1
select a.*, IFNULL(b.customers_name, 'In House') 
from order a 
LEFT JOIN customers b ON a.customers_id=b.customers_id 
order by b.customers_name; 

ㅎ 우리 모두 여기에 같은 대답을 얻었다 ...

0

하나의 옵션 :

select a.*, case when a.customers_id=0 then 'In House' else b.customers_name end as customers_name 
from order a 
left join customers b on b.customers_id=a.customers_id; 

가 BTW 난 당신이 "가입"구문을 사용하는 것이 좋습니다. "Where"절에서 조인 조건을 읽는 것이 훨씬 쉽습니다.

0

이 방법에서는 UNION을 사용하여 쿼리 중에 "고객 0"행을 추가 한 다음 INNER JOIN을 입력합니다. LEFT JOIN이 작동하지 않는 경우에만 사용하십시오. order 테이블의 외래 키 관계는 분명히 customers이 아닙니다. 그렇지 않으면 customer_id0 일 수 없으므로 LEFT JOIN은 일부 가비지를 가져올 수 있습니다. 당신은 그 판사가되어야합니다.

select a.*, b.customers_name 
from order a 
INNER JOIN (
    SELECT customers_id, customers_name 
    FROM customers 
    UNION SELECT 0, 'In House') b ON a.customers_id=b.customers_id 
order by b.customers_name; 
관련 문제