Уникальное соединение с сохранением оригинального стола mysql - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы объединить три таблицы в 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 его необходимо отредактировать следующим образом: this:

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 редактировался до объединения?

1 Ответ

2 голосов
/ 02 апреля 2020

Используйте это выражение CASE в предложении 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
..................................
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...