Несколько 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 не отображались повторно для каждого выбранного отчета отчета.