2017-08-02 2 views
0

によって選択テーブルを置き換える:私は中間テーブルを持って更新

text_mining_molecule

|text_mining_id| molecule_id | 
| -------------| ---------- | 
| ID   | ID   | 

二つの他のテーブル:

表分子:

id | main_name | others … 
--- | --------- | ------ 
1 | caféine | others … 

表jsonTextMining:

id | title | molecule_name      | others … 
---|------- |-------------------------------------|------ 
1 | title1 | colchicine, cellulose, acid, caféine| others … 

text_mining_molecule IDの2人の他人のテーブルjson_text_miningmoleculeからとリストで項目を選択したときに挿入する必要があります。

実はこれは動作しますが、私もこれを持っているので、私は、IDの関連でも充填するtext_mining_moleculeを必要とする4.

INSERT INTO text_mining (id, solrid, originalpaper, annotatedfile, title, keyword, importantsentence, version, klimischscore, moleculename, synonymname, validation) 
      SELECT id, solrid, originalpaper, annotatedfile, title, keyword, importantsentence, version, klimischscore, molecule_name, synonym_name, validation 
      FROM json_text_mining WHERE klimischscore < 4 

をスコアを選択したときに、既にtext_miningjson_text_miningからすべての行を挿入するドロップダウンがありますコードの一部:

SELECT s.id, m.id 
      FROM (SELECT id, regexp_split_to_table(molecule_name,', ') AS m_name 
      FROM json_text_mining) AS s, molecule m 
      WHERE m.main_name = s.m_name; 

は、どのように私の代わりにselectinsertと直接text_mining_moleculeテーブルを更新することができますか?

+0

いくつかのFK .. text_mining_moleculeとs.idとの関係は何だ、m.id ... –

+0

'json_text_mining'は、すべての記事があり、一時テーブルです?有効であることを待つ。誰かが検証ボタンをクリックすると、 'json_text_mining'記事が' text_mining'テーブルにコピーされますが、中間テーブルの関係はそこにはありません – Gy0m

+0

それで、あなたは更新を挿入する必要はありませんか? –

答えて

0

使用CTE。 text_mining_molecule.molecule参照molecule.id場合例えば、のようななめらかになります:

with c as (
SELECT s.id sid, m.id mid 
      FROM (SELECT id, regexp_split_to_table(molecule_name,', ') AS m_name 
      FROM json_text_mining) AS s, molecule m 
      WHERE m.main_name = s.m_name 
) 
update text_mining_molecule t 
set sid = c.sid 
from c 
where t.molecule = c.mid 
関連する問題