我有 3 個表,staging、position_mapping和target。
暫存表
| ID | pos_name |
|---|---|
| 4 | SM |
| 5 | 敏捷 Scrum Master |
| 6 | Scrum 大師 |
位置映射表
| ID | 位置名 |
|---|---|
| 1 | 敏捷 Scrum Master |
在目標表上,我打算從暫存中插入這些行,如下所示:
| ID | position_id |
|---|---|
| 14 | 1 |
| 15 | 1 |
| 16 | 1 |
起初我通過使用 JOINS 來做到這一點:
INSERT INTO target(position_id)
SELECT positions_mapping.id FROM staging
LEFT JOIN positions_mapping ON positions_mapping.position_name = staging.pos_name
但這僅適用于完全匹配。敏捷 Scrum Master 的不同名稱出現了,我仍然需要將它們插入為“敏捷 Scrum Master”,無論它是否完全匹配。
我想在這里有條件陳述句?我不太確定把它們放在哪里。
uj5u.com熱心網友回復:
CASE您可以在子句中使用陳述句ON。就像是:
positions_mapping.position_name = CASE WHEN staging.pos_name IN ('SM', 'Scrum Master') then 'Agile Scrum Master' ELSE staging.pos_name END
這確實需要對所有特殊情況進行硬編碼,但除非您在某處有映射或可靠的轉換模式,否則您幾乎肯定必須這樣做。
uj5u.com熱心網友回復:
Wizh 一個完整的 zexz 搜索,你可以喜歡其中的兩行,但第一個是通用的找到它。
但是由于您不能 ppu 另一個表的任何列,因此您需要一種動態方法
CREATE TABLE staging ( `id` INTEGER, `pos_name` VARCHAR(18), FULLTEXT KEY (pos_name ) ); INSERT INTO staging (`id`, `pos_name`) VALUES ('4', 'SM'), ('5', 'Agile Scrum Master'), ('6', 'Scrum Master');
CREATE TABLE positions_mapping ( `id` INTEGER, `position_name` VARCHAR(18) ); INSERT INTO positions_mapping (`id`, `position_name`) VALUES ('1', 'Agile Scrum Master');
PREPARE stat FROM "SELECT s.`id`,pm.`id` FROM staging s JOIN positions_mapping pm ON MATCH (s.`pos_name` ) AGAINST (?) > 0"; SET @c_val = (SELECT `position_name` FROM positions_mapping WHERE `position_name` = 'Agile Scrum Master'); EXECUTE stat USING @c_val;? ? 編號 | ID -: | -: 5 | 1 6 | 1
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/461348.html
