2016-10-03 1 views
1

MEMSQL! Ich möchte einen Datensatz in einer Tabelle löschen, die eine Übereinstimmung in einer anderen Tabelle für mehrere Felder aufweist. Ist das möglich?memsql Multitabelle löschen, ist das möglich?

Die MySQL-Abfrage wäre ich verwenden könnte so etwas wie:

delete from t1 used t1,t2 where t1.f1=t2.f1 and t1.f2=t2.f2 

oder

delete t1 from t1,t2 where... 

Nach http://docs.memsql.com/docs/delete:

MemSQL noch nicht vollständig Multi-Table unterstützen DELETE Aussagen. Unterabfragen in der WHERE-Klausel sind die einzigen Multi-Tabelle DELETE erlaubt.

Kann ich mehrere Bedingungen in where löschen Klausel ohne concat, etc?

P.S. Sorry für meine schrecklichen Englisch

+1

Mögliche [Duplizieren] [1] [1]: http://stackoverflow.com/questions/6260688/how-do-i-use-cascade-delete-with-sql-server –

Antwort

1

versuchen, etwas wie folgt aus:

delete from t1 where exists (select 1 from t2 where t1.f1=t2.f1 and t1.f2=t2.f2) 
+0

Thx für Antwort ! Für Select hat es funktioniert. Aber löschte Fehler "'korrelierte subselect, die nicht transformiert werden kann und nicht auf shard keys" wird nicht von memsql unterstützt Distributed " –

+0

MemSQL hat derzeit begrenzte Unterstützung für diese Abfrage Formen, wenn die Joins Cross-Shard sind. Wenn Sie die Shard-Schlüssel von t1 und t2 (f1, f2) einfügen können, sollte es funktionieren. Eine andere Lösung besteht darin, entweder t1 oder t2 zu einer Referenztabelle zu machen. –

0

Ich hatte das gleiche Problem mit dem Versuch, einige Felder einer Tabelle aus einer anderen Tabelle zu aktualisieren.

Das Problem ist, dass Correlated subselect, die nicht umgewandelt werden können und nicht mit auf Scherbe Tasten wird nicht unterstützt durch MemSQL Distributed Also meine Lösung, die eine SELECT-Abfrage erstellen war, den Update-Anfragen und erzeugt dann führe sie aus. Hier ist eine vereinfachte Abfrage-Generator:

select concat('update table1 set t1_code=\'',t2_code, 
    '\',t1_url=\'',t2_url, 
    '\',t1_width=\'',t2_width, 
    '\' where t1.id=',t2.id,';') query 
from t1 
inner join t2 on t2.id=t1.id; 

die Aktualisierungsabfrage für jede Zeile erzeugt, die Aktualisierung durch ; getrennt werden muss.

generieren wird löschen noch einfacher - Sie können nur die IDs auswählen gelöscht werden und eine Abfrage delete from t1 where id in (-the list of ids that was selected for deletion-)

erzeugen, die meine Abhilfe für diese memsql Einschränkung war.