2016-07-31 21 views
4

Ich möchte eine Zeile nur einfügen, wenn es Elternteil in einer anderen Tabelle ist.Mysql - Überprüfen, ob Zeile existiert

thread1 Tisch

id | content  | 
1 | Hello World | 
2 | Bye World | 

thread2 Tisch

id | content  | 
1 | Naruto  | 
2 | DragonBallz| 

Kommentar Tabelle

id | thread_id| thread_type | content | 
1 | 1  |  thread1 | hellow | 
2 | 1  |  thread2 | bye-bye | 

Nun, wenn ich tun

INSERT INTO comment(thread_id,thread_type,content)VALUES('3','thread2','Whatever'); 

sollte es scheitern, weil 3nicht in thread2 Tabelle existiert.

Dies ist möglich, indem Sie aus der Thread-Tabelle überprüfen. Aber ist es ohne es möglich? Ohne eine zusätzliche Abfrage zu machen?

aktualisieren

Tabellen oben aktualisiert wurde. die thread_type bezieht sich auf die Tabelle thread1 & thread2

+0

ist es möglich, dass Sie beim Einfügen wissen threadtype? –

+1

Sie sollten in Erwägung ziehen, eine Tabelle für Threads und stattdessen ein Feld in dieser Tabelle für 'thread_type' zu verwenden. – deed02392

Antwort

3

einen Fremdschlüssel zwischen den beiden Tabellen anlegen, Gewinde (id) als Mutter und Kommentar (thread_id) als Kind verwenden, sollte es tun.

Dies ist der Befehl, den Sie laufen soll -

ALTER TABLE comment 
    ADD FOREIGN KEY 
    (thread_id) 
    REFERENCES thread (id) 
+0

Was ist, wenn ich mehrere Eltern habe? wird es funktionieren ? – user6654248

+0

Können Sie ein Beispiel für mehrere Eltern geben? Ich verstehe das Szenario nicht ganz. –

+0

siehe Update zu meiner Frage. Ich aktualisierte die Tabellen – user6654248

1
diese

Versuchen:

INSERT INTO comment ('3','thread2','Whatever') 
select t2.id,0,0 
from thread2 t2 
where t2.id = '3'; 

Ich gehe davon aus, id in der Kommentartabelle ist ein Primärschlüssel und Auto erhöht.
Die obige Abfrage wählt die ID aus der thread2-Tabelle abhängig von Ihrem Thread-Typ. Wenn id in der thread2-Tabelle gefunden wird, wird eine neue Zeile eingefügt, andernfalls wird eine Null-Zeile eingefügt, da aus der übergeordneten Tabelle null Zeilen ausgewählt werden.

Hope it :)

0

Dies hilft, das tun kann:

INSERT INTO comment(thread_id,thread_type,content) 
(select id as thread_id, thread_type, '[content]' as content 
from ((select id,'thread1' as thread_type from thread1) 
union 
(select id,'thread2' as thread_type from thread2)) threads 
where threads.id=[thread_id] and threads.thread_type ='[thread_type]') 

Wie in Ihrer Probe

[thread_id]=3 
[thread_type]=thread2 
[content]=Whatever 

Also, wenn es ein solches Mutter es eine Zeile einfügen wird, Sonst wird nichts eingefügt.

Verwandte Themen