mySQL-如何将一个索引映射/查找到另一个索引并连接到另一个表?

mySQL-如何将一个索引映射/查找到另一个索引并连接到另一个表?,mysql,sql,join,foreign-keys,case,Mysql,Sql,Join,Foreign Keys,Case,我有两个具有不同索引的表,可以(手动)从一个映射到另一个: 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 t

我有两个具有不同索引的表,可以(手动)从一个映射到另一个:

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
此查询失败,因为它无法识别“映射”:

此查询失败,因为您无法在ON条件内使用用例:
[这个查询实际上是有效的。我在实际代码中忘记了结尾。结果证明这有很大的不同。]

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) 我应该用什么谷歌搜索词来找到我需要的解决方案

2) 实际的解决方案是什么


3) 这可以在不创建查找表的情况下完成吗(最简单的解决方案)

where子句无法访问
select
子句中定义的别名(因为基本上,前者在后者之前进行评估)

您希望在
join
条件中使用
case
表达式:

SELECT 
    t1.ID t1_id, 
    t1.name t1_name, 
    t1.data t1_data, 
    t2.ID t2_id, 
    t2.name t2_name, 
    t2.data t2_data
FROM table1 AS t1
INNER JOIN table2 AS t2 
    ON t2.name = CASE t1.name
      WHEN 'A' THEN 'A3'
      WHEN 'B' THEN 'B2'
      WHEN 'C' THEN 'C1'
    END

注意,最好在
select
子句中使用别名来消除表中同名列的歧义,如上所示

你的查询很好:你试过了吗?现在可以了。我补充说,一旦我意识到我真正的问题是什么,我就错过了结局。
SELECT 
    t1.ID t1_id, 
    t1.name t1_name, 
    t1.data t1_data, 
    t2.ID t2_id, 
    t2.name t2_name, 
    t2.data t2_data
FROM table1 AS t1
INNER JOIN table2 AS t2 
    ON t2.name = CASE t1.name
      WHEN 'A' THEN 'A3'
      WHEN 'B' THEN 'B2'
      WHEN 'C' THEN 'C1'
    END