2012-02-21 32 views
14

Tengo una tabla de metalesmúltiple INNER JOIN de la misma tabla

MetalID integer 
MetalName text 
MetalCode text 

tabla de artículos

ItemID  integer 
ItemName text 
... 
Metal1  int Ref.-> metals.metalID 
Metal2  int Ref.-> metals.metalID 
Metal3  int Ref.-> metals.metalID 

Estoy tratando de seleccionar tres MetalCodes

SELECT m.MetalCode as 'Metal1', m.MetalCode as 'Metal2',m.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m ON m.metalID=k.metal1 
INNER JOIN Metals AS m ON m.metalID=k.metal2 
INNER JOIN Metals AS m ON m.metalID=k.metal3 
WHERE k.ItemID=? 

Parece que soy hacerlo completamente mal. Por favor ayuda.

+3

No se puede tener varios alias con el mismo nombre. – rid

+1

¿Qué estás tratando de lograr? – YXD

Respuesta

20

Debe especificar múltiples alias para sus tablas. los estás llamando a todos m.

SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 
+2

bueno, escribimos exactamente el mismo código de ejemplo exactamente al mismo tiempo. Debe ser gemelos. +1, de hecho :) –

+0

¡bien! así es como funciona SO :) – Beatles1692

+0

Todavía hay algo mal. Estoy obteniendo resultados -> Zn, Zn, Zn, mientras que hay metales diferentes – NCFUSN

2

intente esto:

SELECT m.MetalCode as 'Metal1', n.MetalCode as 'Metal2'o.MetalCode as 'Metal3' 
FROM Item as k INNER JOIN Metals AS m ON m.metalID=k.metal1 
     INNER JOIN Metals AS n ON n.metalID=k.metal2 
     INNER JOIN Metals AS o ON o.metalID=k.metal3 
WHERE k.ItemID=? 
8

Bueno, no completamente equivocada. ;)

Dondequiera que haya "INTERIOR unir metales AS m", m tiene que ser algo único (no m cada vez).

intentar algo como esto (no probado):

SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2', m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 
1
SELECT m1.MetalCode as 'Metal1', m2.MetalCode as 'Metal2',m3.MetalCode as 'Metal3' 
FROM Item as k 
INNER JOIN Metals AS m1 ON m1.metalID=k.metal1 
INNER JOIN Metals AS m2 ON m2.metalID=k.metal2 
INNER JOIN Metals AS m3 ON m3.metalID=k.metal3 
WHERE k.ItemID=? 

o más simple, pero conseguir uno metalcode por fila

SELECT MetalCode 
FROM Item 
WHERE metalID = metal1 OR metalID = metal2 OR metalID = metal3