Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保持原始表mysql的唯一联接_Mysql_Sql - Fatal编程技术网

保持原始表mysql的唯一联接

保持原始表mysql的唯一联接,mysql,sql,Mysql,Sql,我想在sql中连接三个表。表1和表2需要在 键符号,但在加入之前需要编辑表1中的符号 三个连接: 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

我想在sql中连接三个表。表1和表2需要在 键符号,但在加入之前需要编辑表1中的符号

三个连接:

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%'
在加入表1之前,需要如下编辑:

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子句中使用该大小写表达式:

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
..................................

在ON子句中使用该大小写表达式:

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
..................................

请提供示例数据和所需结果。请提供示例数据和所需结果。足够优雅,尽管性能取决于DBMS优化器的性能,而且由于代码需要字符串函数进行字符串操作,我看不到其他解决方法。足够优雅,尽管性能取决于DBMS优化器的性能,而且由于代码需要使用字符串函数进行字符串操作,我看不到其他解决方法。