2009-09-12 3 views
21

customers1과 customers2의 모든 제품에 고객 이름을 포함하려면 어떻게합니까?여러 테이블에서 SQL SELECT

customer1 table 
cid name1 
1 john 
2 joe 

customer2 table 
cid name2 
p1 sandy 
p2 linda 

product table 
pid cid pname 
1 1 phone 
2 2 pencil 
3 p1 pen 
4 p2 paper 

결과는 훨씬 더이

pid cid pname name1 name2 
1 1 phone john NULL 
2 2 pencil joe NULL 
3 p1 pen NULL sandy 
4 p2 paper NULL linda 
+0

확인을 같이해야합니다! –

+0

어떤 데이터베이스 기술을 사용하고 있습니까? –

답변

42
SELECT p.pid, p.cid, p.pname, c1.name1, c2.name2 
FROM product p 
LEFT JOIN customer1 c1 ON p.cid = c1.cid 
LEFT JOIN customer2 c2 ON p.cid = c2.cid 
+2

+1 ** ** 사용하지 않음 PRODUCT. * –

+0

p는 두 번째 줄의 제품 테이블임을 선언합니다. "FROM product p" – Keibosh

3
SELECT `product`.*, `customer1`.`name1`, `customer2`.`name2` 
FROM `product` 
LEFT JOIN `customer1` ON `product`.`cid` = `customer1`.`cid` 
LEFT JOIN `customer2` ON `product`.`cid` = `customer2`.`cid` 
7
SELECT pid, cid, pname, name1, name2 
FROM customer1 c1, product p 
WHERE p.cid=c1.cid 
UNION SELECT pid, cid, pname, name1, name2 
FROM customer2 c2, product p 
WHERE p.cid=c2.cid; 
+0

name2는 해당 공용 영역의 첫 번째 절반에 알 수없는 열 (및 하반기에 name1)입니다. –

+0

CUSTOMER 테이블에 name2 열이 없습니다. 고객 이름 열을 다시 정렬하고 원하는 출력과 일치하도록 null을 교환해야합니다. 끝나면 대부분의 우리가 생각해 낸 LEFT JOIN에 대한 대안을 제공합니다. –

+0

@rexem 고객 2 테이블에 있습니다 –

3
select p.pid, p.cid, c1.name,c2.name 
from product p 
left outer join customer1 c1 on c1.cid=p.cid 
left outer join customer2 c2 on c2.cid=p.cid 
+0

PRODUCT.pname 열이 누락 됨 –

1
SELECT p.pid, p.cid, p.pname, c1.name1, c2.name2 
FROM product AS p 
    LEFT JOIN customer1 AS c1 
     ON p.cid = c1.cid 
    LEFT JOIN customer2 AS c2 
     ON p.cid = c2.cid 
1
select pid, cid, pname, name1, null 
from product p 
inner join customer1 c on p.cid = c.cid 
union 
select pid, cid, pname, null, name2 
from product p 
inner join customer2 c on p.cid = c.cid 
+0

가독성이 투표를 얻는 열쇠입니다. 답을 형식화하십시오. –

+0

시도했지만, 할 것이다 :) –

관련 문제