如何预处理信息以匹配查询中的联接

时间:2018-02-09 23:33:51

标签: mysql sql

我有两个表,我希望通过其type字段进行链接。

表1

id | type
---+--------
1  | One
2  | Two
3  | Three
4  | Four
5  | Two

表2

id | type
---+------
34 | N
35 | Z
26 | Y
27 | W

等效表是(此表不存在且不存在)

One = Z
Two = Y
Three = N
Four = W

我的查询是

SELECT t1.type 
FROM table1 t1, table2 t2
WHERE t1.type = t2.type

可能最好的解决方案是更改其中一个表格中的信息。但我不能这样做,我也无法创建任何商店程序。 我想只有一个查询来执行此操作。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以在查询中合成关系表:

SELECT t1.id AS id1, t1.type, t2.id AS id2
FROM table1 AS t1
JOIN (
    SELECT 'One' AS `long`, 'Z' AS short
    UNION ALL
    SELECT 'Two', 'Y'
    UNION ALL
    SELECT 'Three', 'N'
    UNION ALL
    SELECT 'Four', 'W'
) AS r ON t1.type = r.long
JOIN table2 AS t2 ON t2.type = r.short

DEMO

答案 1 :(得分:0)

  

可能最好的解决方案是更改其中一个表格中的信息。但我不能那样做,我也无法创建任何商店程序。我想只有一个查询来执行此操作。

您不一定要更改两个表中的一个表中的信息。您可以创建一个表,其中包含两种类型之间的关系,

<强>表3

type1 | type2
------+------
One   | Z
Two   | Y
Three | N
Four  | W

然后你可以这样写一个查询:

SELECT table1.type 
FROM table1
JOIN table3
    ON table1.type = table3.type1
JOIN table2
    ON table3.type2 = table2.type