2012-02-21 2 views
14

У меня есть таблица металловMultiple INNER JOIN из той же таблицы

MetalID integer 
MetalName text 
MetalCode text 

товара таблица

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

Я пытаюсь выбрать три 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=? 

Похоже, я делая это совершенно неправильно. Пожалуйста помоги.

+3

Вы не можете иметь несколько псевдонимов с тем же именем. – rid

+1

Что вы пытаетесь достичь? – YXD

ответ

20

Вы должны указать несколько псевдонимов для своих таблиц. вы вызываете все из них 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

приятный, мы точно писали один и тот же примерный код в одно и то же время. Должны быть близнецы. +1, на самом деле :) –

+0

ну! это способ SO работает :) – Beatles1692

+0

Theres все еще что-то не так. Я получаю результат -> Zn, Zn, Zn, в то время как есть разные металлы – NCFUSN

2

попробовать это:

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

Ну, не полностью неправильно. ;)

Где бы вы ни были «INNER JOIN Металлы AS м», m должно быть что-то уникальное (не 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=? 
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=? 

или проще, но получить один metalcode на строку

SELECT MetalCode 
FROM Item 
WHERE metalID = metal1 OR metalID = metal2 OR metalID = metal3 
Смежные вопросы