【发布时间】:2020-07-28 19:47:42
【问题描述】:
我有两个具有不同索引的表,我可以(手动)将它们从一个映射到另一个:
table1 table2
ID Name Data ID Name Data
1 A X 4 C1 11
2 B Y 5 B2 22
3 C Z 6 A3 33
A 映射到 A3,B 映射到 B2,C 映射到 C1
我希望的结果集是:
t1.ID t1.Name t1.Data t2.ID t2.Name t2.Data
1 A X 6 A3 33
2 B Y 5 B2 22
3 C Z 4 C1 11
此查询失败,因为它无法识别“地图”:
SELECT *,
CASE t1.name
WHEN 'A' THEN 'A3'
WHEN 'B' THEN 'B2'
WHEN 'C' THEN 'C1'
END AS map
FROM table1 AS t1
INNER JOIN table2 AS t2 ON (t2.name = map)
此查询失败,因为您不能在 ON 条件中使用 CASE:
[这个查询确实有效。我忘记了实际代码中的 END 。事实证明,这有很大的不同。]
SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON (t2.name = (SELECT CASE t1.name
WHEN 'A' THEN 'A3'
WHEN 'B' THEN 'B2'
WHEN 'C' THEN 'C1'
END ) )
所以我的问题是:
1) 我应该使用哪些 Google 搜索字词来找到我需要的解决方案?
2) 实际的解决方案是什么?
3) 这可以在创建查找表的情况下完成吗(最简单的解决方案)?
【问题讨论】:
-
您的查询运行良好:dbfiddle.uk/… 您是否尝试过?
-
现在可以使用了。一旦我意识到我的实际问题是什么,我就添加了我缺少的 END。
标签: mysql sql join foreign-keys case