mysql - 保留原表mysql的同时唯一join
问题描述
我想在sql中加入三个表。table1 和 table2 需要在键符号上连接,但是 table1 中的符号需要在连接之前进行编辑。
三连:
SELECT table1.symbol, table1.risk_factor, table1.risk_factor_name, table1.type, table1.position, table3.`Position dif ex corr`, table1.haircut
FROM `Positions_EOD` table1
LEFT JOIN `positions1` table2 ON table1.symbol = table2.symbol
LEFT JOIN (SELECT * FROM `Final_Pos` WHERE business_date = '2020-04-01' AND `Position check` = 'Correct') table3 ON table2.isin = LEFT(table3.VT_id, INSTR(table3.VT_id, '_') - 1)
WHERE table1.business_date = '2020-04-01' AND table2.business_date = '2020-04-01' AND table2.legal_entity = 'HK' AND table1.symbol LIKE 'ES%'
在加入table1之前,需要这样编辑:
SELECT
CASE
WHEN (`type` = 'ST') THEN symbol
WHEN (`type` = 'FU') THEN LEFT(REPLACE(symbol,' ', ''), LENGTH(REPLACE(symbol,' ', ''))-2)
END AS 'symbol'
FROM `Positions_EOD`
如何编辑 table1 连接,以便在加入之前编辑 table1 中的符号?
解决方案
在 ON 子句中使用 CASE 表达式:
SELECT table1.symbol, table1.risk_factor, table1.risk_factor_name, table1.type, table1.position, table3.`Position dif ex corr`, table1.haircut
FROM `Positions_EOD` table1 LEFT JOIN `positions1` table2
ON CASE
WHEN (table1.`type` = 'ST') THEN table1.symbol
WHEN (table1.`type` = 'FU') THEN LEFT(REPLACE(table1.symbol,' ', ''), LENGTH(REPLACE(table1.symbol,' ', ''))-2)
END = table2.symbol
..................................
推荐阅读
- javascript - 从 NodeJS 过滤嵌套数组
- reactjs - 在 Chrome 中禁用同源策略的自定义 React 启动脚本
- sql - 2 级折扣之和
- node.js - VScode 中的 NodeJs 终端配置
- android - Android Room db 一对多与列表字段
- r - 如何使用 dlm 建立温度结果模型?
- powershell - 修改powershell脚本添加额外参数
- react-native - 如何使用 createBottomTabNavigator 将 TouchableWithoutFeedback 和 TouchableNativeFeedback 呈现为选项卡按钮?
- sql - 带有时间戳的复杂 SQL 查询
- firebase - 如何在没有 Firebase 功能的情况下部署到 Firebase?