mysql - 如何在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 |
解决方案
一种方法是连接val_1
,val_2
并val_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;
请参阅演示。
推荐阅读
- python - 有什么方法可以知道正在运行的 Windows 版本是什么?
- angularjs - Angularjs使用组件封装输入框
- java - 如何在java线程中使用等待?
- angular - 如何从角度 6 调用 https url
- android - Android:在 Play 商店的更新版本中找不到新的 mp3 文件
- c# - 读取文件并使用产品 ID 打印价格
- ios - Firestore - 异常'FIRInvalidArgumentException',原因:'不支持的类型:_SwiftValue'
- c# - 多线程c#之间的控制/同步变量
- javascript - 如何用javascript中的键移动方块?
- java - 使用 ReplacementSpan 时 getmeasuredheight 返回 0 或相同