首页 > 解决方案 > 如何在mysql的select语句中复用多列的值

问题描述

我有两张桌子。Table_1 具有来自 table_2 的三个外键。我需要从 table_2 中选择所有行,其中 id 等于 table_1 中特定行的 val_1、val_2 和 val_3 的值。例如:

SELECT val_1, val_2, val_3 from table_1 WHERE id = 1;

然后使用第一个查询运行的结果

SELECT name FROM table_2 WHERE id IN (101, 102, 103);

有没有办法在一个查询中做到这一点?

表格1

ID 姓名 val_1 val_2 val_3
1 项目1 101 102 103
2 项目2 104 105 106

表_2

ID 姓名
101 子项目1
102 子项目2
103 子项目3
104 子项目4
105 子项目5
106 子项目6

标签: mysqljoindenormalized

解决方案


一种方法是连接val_1,val_2val_3在子查询中使用FIND_IN_SET()

SELECT name 
FROM table_2 
WHERE FIND_IN_SET(
        id, 
        (SELECT CONCAT_WS(',', val_1, val_2, val_3) FROM table_1 WHERE id = 1)
      );

或者,加入表格:

SELECT t2.name 
FROM table_2 t2 INNER JOIN table_1 t1
ON t2.id IN (t1.val_1, t1.val_2, t1.val_3)
WHERE t1.id = 1;

请参阅演示


推荐阅读