0

我正在创建一个游戏,并且遇到需要根据单行中列出的 ID 值从表(Table1)中选择名称。

行示例

行 ID 单元 1 单元 2 单元 3 单元 4

并说第 1 行填充了单位数据

wfmatch

行 ID 单元 1 单元 2 单元 3 单元 4
----- ----- ----- ----- -----
1 1 2 3 4

然后在我的第二个表(Table2)中,我有实际的名字

wfunits

单位 ID 名称
------ ----------
1 首件
2 第二项
3 第三项
4 第四项

在一个查询中或尽可能接近我希望能够获得从第一个表中列出的 ID 的名称,结果如下:

这是使用底部代码实现的最终结果。(+4 个名字)

行 ID 单元 1 单元 2 单元 3 单元 4
----- --------- ---------- --------- ----------
1 第一项 第二项 第三项 第四项

我已经尝试过 JOIN 语句,但到目前为止我一直缺乏关于如何正确使用它们的知识,我觉得这可能是获得结果的方法,我只是想不通。

编辑:尝试的代码

SELECT * FROM wfmatch AS t1 INNER JOIN wfunits AS t2 ON t1.crunit1 = t2.id WHERE t1.mid = 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

您可能需要四个连接,每列一个,如下所示:

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 回答