0

ゲームを作成していますが、1行にリストされているID値に基づいて、テーブル(Table1)から名前を選択する必要があります。

行の例

RowID Unit1 Unit2 Unit3 Unit4

そして、行1にはユニットのデータが次のように入力されているとします。

wfmatch

RowID Unit1 Unit2 Unit3 Unit4
----- ----- ----- ----- -----
1 1 2 3 4

次に、2番目のテーブル(Table2)に実際の名前があります

wfunits

UnitID名
------ ----------
1最初のアイテム
22番目のアイテム
33番目のアイテム
44番目のアイテム

1つのクエリで、または可能な限り近くで、最初のテーブルからリストされたIDの名前を取得して、次のような結果を得ることができるようにしたいと思います。

これは、下部のコードで達成された最終結果です。(+4つの名前)

RowID Unit1 Unit2 Unit3 Unit4
----- --------- ---------- --------- ----------
1 Firstitem Seconditem Thirditem Fouritem

私はJOINステートメントを試してみましたが、これまでのところ、それらを適切に使用する方法についての知識が不足しており、これがおそらく結果を得る方法であると感じています。

編集:試行されたコード

SELECT * FROM wfmatch AS t1 INNER JOIN wfunits AS t2 ON t1.crunit1 = t2.id WHERE t1.mid = 1

結果:否定的、1つの名前のみが提供されます。

作業の最終結果:

SELECT
m.mid, u1.name AS Unit1, u2.name AS Unit2, u3.name AS Unit3, u4.name AS Unit4,
u5.name AS Unit5, u6.name AS Unit6, u7.name AS Unit7, u8.name AS Unit8
FROM wfmatch AS m  
INNER JOIN wfunits AS u1 ON m.crunit1=u1.id  
INNER JOIN wfunits AS u2 ON m.crunit2=u2.id 
INNER JOIN wfunits AS u3 ON m.crunit3=u3.id 
INNER JOIN wfunits AS u4 ON m.crunit4 =u4.id 
INNER JOIN wfunits AS u5 ON m.counit1=u5.id 
INNER JOIN wfunits AS u6 ON m.counit2=u6.id 
INNER JOIN wfunits AS u7 ON m.counit3=u7.id  
INNER JOIN wfunits AS u8 ON m.counit4 =u8.id 
WHERE mid=1
4

2 に答える 2

1

次のように、列ごとに1つずつ、合計4つの結合が必要になる可能性があります。

SELECT
  m.RefID,
  u1.Name AS Unit1,
  u2.Name AS Unit2,
  u3.Name AS Unit3,
  u4.Name AS Unit4
FROM Table1 AS m
  INNER JOIN Table2 AS u1 ON m.Unit1 = u1.UnitID
  INNER JOIN Table2 AS u2 ON m.Unit2 = u2.UnitID
  INNER JOIN Table2 AS u3 ON m.Unit3 = u3.UnitID
  INNER JOIN Table2 AS u4 ON m.Unit4 = u4.UnitID

代替案もありますが、それがより良いかどうかはわかりません。

SELECT
  m.RefID,
  MAX(CASE u.UnitID WHEN m.Unit1 THEN u.Name END) AS Unit1,
  MAX(CASE u.UnitID WHEN m.Unit2 THEN u.Name END) AS Unit2,
  MAX(CASE u.UnitID WHEN m.Unit3 THEN u.Name END) AS Unit3,
  MAX(CASE u.UnitID WHEN m.Unit4 THEN u.Name END) AS Unit4
FROM Table1 AS m
  INNER JOIN Table2 AS u ON u.UnitID IN (m.Unit1, m.Unit2, m.Unit3, m.Unit4)
GROUP BY m.RefID
于 2012-05-27T18:40:43.353 に答える
0

このようなものがあなたのために働くかもしれません:

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.id = t2.id
WHERE t1.rowid = ?
于 2012-05-27T14:11:28.707 に答える