Несколько 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=?

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

Ответы

Ответ 1

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

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

Если у вас есть "INNER JOIN Metals AS m", 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=?

Ответ 3

попробуйте следующее:

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=?

Ответ 4

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=?

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

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

Ответ 5

выберите * из (ВЫБРАТЬ [BankName], Bank_Type,

сумма ([Disbursement_Acc]) как Disbursement_Acc_sikhs

сумма ([Disbursement_Amt]) как Disbursement_Amt_Sikhs

сумма ([Bal_Outstanding_Acc]) как Bal_Outstanding_Acc_Sikhs

сумма ([Bal_Outstanding_Amt]) как Bal_Outstanding_Amt_Sikhs

FROM [Statements_DB]. [Dbo]. [MinorityCommunity]

где [Financial_yr] = '01-01-2018' и [Financial_Quarter] = 2 и [CategoryName] = 'SIKHS'

группа по [BankName], Bank_Type) объединение

(ВЫБЕРИТЕ [BankName], Bank_Type,

сумма ([Disbursement_Acc]) как Disbursement_Acc_Muslims

сумма ([Disbursement_Amt]) как Disbursement_Amt_Muslims

сумма ([Bal_Outstanding_Acc]) как Bal_Outstanding_Acc_Mislims

сумма ([Bal_Outstanding_Amt]) как Bal_Outstanding_Amt_Muslims

FROM [Statements_DB]. [Dbo]. [MinorityCommunity]

где [Financial_yr] = '01-01-2018' и [Financial_Quarter] = 2 и [CategoryName] = 'MUSLIMS'

группировать по [BankName], Bank_Type) b на b. [BankName] = a. [BankName]

помогите мне,.. так, чтобы столбцы BankName и BankType не отображались повторно для каждого выбранного отчета отчета.