2016-05-28 6 views
0

これはなぜ機能しないのか分かりませんが、(テーブルからの)カラムとデータ(テーブルからではありません)そこ。Mysqlは、あるテーブルの列とデータをEXISTSに基づいて挿入します

INSERT INTO event_tags (event_id, tag_id) 
VALUES (SELECT events.id, 2 FROM events WHERE events.info = 'HybridAnalysis') 
WHERE NOT EXISTS (SELECT events.id=event_tags.event_id AND event_tags.tag_id=2); 

テーブル

Events 
id Info 
1   ThreatExpert 
2   HybridAnalysis 
3   ThreatExpert 
4   HybridAnalysis 

Event_tags 
event_ID tag_id 
3   1 
4   2 

(eventsIDが主ではありません)

Event_tags(表)は、このように見える終わるはずです -

Event_tags 
event_id tag_id 
3   1 
4   2 
1   1 
2   2 

これは私の誤りである - ERROR 1064 (42000):SQL構文にエラーがあります。 *

の下に編集された「WHERE NOT) 『行2

でHybridAnalysis』 events.info =イベントからevents.idを選択して、3」の近くに使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください #####私はそれが簡単に

tags 
id name 
3  HybridAndlysis 
4  ThreatExpert 
+0

構文は次のとおりです。1)insert tbl(col1、col2)values(a、b)...または2)insert x、y from ... – Drew

+0

はthreatExpertとHybridAnalysisのみですあなたが今までに入力する2つの値は?パターンはありますか?これらのタグIDは常に1,2ですか?それ以外の場合は、新しい情報とtag_idsのためにこのクエリを更新する必要があります – EoinS

+0

@ EoinSこれらは現在私が持っている唯一の2つです。ThreatExpertで同じことをしてから、毎晩cronジョブを実行する必要があります。しかし、ええ、もっと後になる可能性があります。 – Dpitt1968

答えて

1

あなたはこれを試すことができますになるかもしれない認識していなかったタグテーブルがありますか? INFO列に基づいて

INSERT INTO event_tags (event_id, tag_id) 
SELECT events.id, 2 
FROM events AS E 
WHERE E.info = 'HybridAnalysis' 
AND NOT EXISTS 
(SELECT 
    1 
FROM event_tags AS ET 
WHERE E.id=ET.event_id AND ET.tag_id=2 
); 

セカンド回答イベントテーブルから

INSERT INTO event_tags (event_id, tag_id) 
    SELECT events.id, 2 
    FROM events AS E 
    WHERE E.info = 'HybridAnalysis' 
    AND NOT EXISTS 
    (SELECT 
     1 
    FROM event_tags AS ET 
    INNER JOIN events AS E1 
    E1.event_id=ET.event_id 
    WHERE E1.info = 'HybridAnalysis' 
    ); 
+0

それはそうしました、私はevents.idをidに変更しなければならなかったので、うまくいくようです。今は同じことをthreatexpertと私はやった! SELECT 1は何をしていますか? 1とは何ですか?多くのありがとうと私は疲れています。 – Dpitt1968

+0

1を選択すると、値がサブクエリから返されるかどうかがチェックされます。サブクエリから/ null値が返されない場合、event_tagsテーブルにレコードが挿入されます。お役に立てれば。 – Sandesh

+0

Tag_idが5の「HybridAnalysis」挿入があるとどうなりますか? – EoinS

1

だからThreatExpertやHybridAnalysisのいずれかを受け入れるためにこれを使用することができ、それがEvent_tagsテーブルに入力していない場合は、既に存在します:

INSERT INTO event_tags (event_id, tag_id) 
SELECT 
events.id, 
(case when E.Info = 'HybridAnalysis' then 1 when E.Info = 'ThreatExpert' then 2 else 0 end) 
FROM events AS E 
WHERE 
NOT EXISTS 
(SELECT 
1 
FROM event_tags AS ET 
WHERE E.id=ET.event_id 
); 

代替のtag_idを持つべき新しいinfoがある場合、CASEステートメントは0をテーブルに挿入します。

あなたのcase文は、新しいinfoエントリを処理するように更新できます。理想的には、tag_ideventsのテーブルのどこかに格納することも、リンクテーブルに格納することもできます。

+0

も機能します!ええ、はい、それは簡単にしたタグテーブルがありますか?元の投稿に追加します。 – Dpitt1968

関連する問題