2009-09-12 15 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

[OK]をようにする必要があります! –

+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が2行目の製品表であるという宣言があります。 "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 JOINsの代替案を提供します。 –

+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
​​
+0

投票率を上げるには、読みやすさが重要です。回答の書式を調べます。 –

+0

試しましたが、行う:) –

関連する問題