2009-09-12 8 views
21

Wie kann ich alle Produkte von customers1 und customers2 ihre Kundennamen enthalten?SQL SELECT aus mehreren Tabellen

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 

Ergebnis sollte so

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, die viel besser ist! –

+0

Welche Datenbanktechnologie verwenden Sie? –

Antwort

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 für ** nicht ** unter Verwendung von PRODUCT. * –

+0

Es gibt eine Erklärung, dass p die Produkttabelle aus der zweiten Zeile ist. "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 ist eine unbekannte Spalte in der ersten Hälfte dieser Union (und name1 in der zweiten Hälfte) –

+0

Es gibt keine Name2-Spalte in beiden Customers Tabelle - Sie müssen die Kundennamenspalten neu anordnen und für null umwandeln, um die gewünschte Ausgabe zu entsprechen. Sobald dies erledigt ist, bieten Sie eine Alternative zu den LINKEN VERBINDUNGEN, die die meisten von uns entwickelt haben. –

+0

@rexem gibt es in der Tabelle customer2 –

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

Fehlende Spalte 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

Lesbarkeit ist der Schlüssel zum Erhalten von Stimmen - schauen Sie in die Formatierung Ihrer Antworten. –

+0

Versucht, wird aber :) –