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