Ich habe zwei Tabellen mit Feldern wie folgt mit Primärschlüssel wie email
, die für beide Tabellen gemeinsam ist.Mysql Update-Tabellen, wenn Spalte vorhanden ist, sonst aktualisieren Sie eine andere Tabelle (denormalised Tabellen)
------------------------------------------------------
|TABLE 1 (userlist) | TABLE 2 (preregistereduser)|
|----------------------------------------------------|
| | |-- same fields
|email | email |
|firstName | firstName |
|lastName | lastName |
|department | department |
|designation | designation |
| | |-- different fields
|verified | locationid |
|mobile | isEnable |
|userType | role |
|gender | userupdated |
|funID | status |
|type | ltype |
|curator | coach |
------------------------------------------------------
Wie Sie sehen, sind einige Schlüssel in beiden Tabellen vorhanden und einige sind nur in einer Tabelle. Jetzt möchte ich die beiden Tabellen aktualisieren, wenn die Felder vorhanden sind, in beiden Tabellen sonst Aktualisierungstabelle, wo Feld so etwas wie dieses Verfahren besteht
IF EXISTS(select mobile from preregisterUser)
THEN
BEGIN
update preregisterUser set mobile = "123456" where email="[email protected]"
END;
IF EXISTS(select mobile from userlist)
BEGIN
update userlist set mobile = "123456" where email="[email protected]"
END;
END IF;
in eine normale MySQL-Abfrage wie
UPDATE preregisterUser pu,userlist ul
if exists (select mobile from preregisterUser) set pu.mobile = "1234",
if exists (select mobile from userlist) set ul.mobile = "1234"
where pu.email="[email protected]" and ul.email="[email protected]"
wie es zu tun? Alles, was ich gefunden habe, ist update, wenn es sonst in eine einzelne Tabelle eingefügt wird.
Hinweis: Die Felder sind zumindest in einer von zwei Tabellen vorhanden. Es gibt keinen Fall, in dem das Feld in beiden Tabellen nicht existiert. Bitte beachten Sie auch, dass die hier angegebenen Felder und Werte ein Beispiel sind
Sie müssten die SQL-Anweisung dynamisch erstellen. Wenn Sie versuchen, eine Abfrage auszuführen, und eine Spalte nicht vorhanden ist, wird die erste Phase der Vorbereitung der Abfrage fehlschlagen, bevor Sie sie überhaupt versuchen und ausführen. –
Die Daten sind nicht richtig normalisiert. Sie benötigen eine Tabelle, die die Felder enthält, die derzeit in mehreren Tabellen dupliziert werden, und dann Fremdschlüssel für die anderen "Erweiterung" -Tabellen, die die zusätzlichen Datensätze enthalten, die unterschiedlich sind. Dann wird dieses Problem verschwinden. Oder sogar, eine Tabelle vollständig, aber mit einigen der Felder, die nullable sind. In jedem Fall haben Sie dann eine zusätzliche Spalte, um den Typ des Datensatzes anzuzeigen (in diesem Beispiel der Typ oder Status des Benutzers). – ADyson
Wird immer zuerst eine Tabelle aktualisiert? ex case1: Sie werden die Tabelle1 zuerst aktualisieren, dann sollte sie die Table2 oder case2 dynamisch aktualisieren: Sie können jede aktualisieren, dann sollte die andere auch aktualisiert werden. Wenn der case1 Ihr Szenario ist, werde ich meine Lösung veröffentlichen. –