2017-05-10 1 views
0

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

+0

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. –

+0

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

+0

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. –

Antwort

-1

ich denke, Sie können so etwas ausprobieren, in Ihrer Auswahl haben Sie Ihren Pkey und Sie verwenden ihn nicht.

IF EXISTS(select mobile from preregisterUser where email="[email protected]) 
     BEGIN 
      update preregisterUser set mobile = "123456" where email="[email protected]" 
     END; 
ELSEIF EXISTS(select mobile from userlist where email="[email protected]) 
     BEGIN 
      update userlist set mobile = "123456" where email="[email protected]" 
     END; 

Ein weiterer Punkt, können Sie 3-Tabellen erstellen Ihre Daten nicht duplizieren: 1 für alle Benutzer mit dem Feld: | userId | email | vorName | nachName | Abteilung | Bezeichnung

und die beiden andere mit:

| idList | verifiziert | mobil | benutzerTyp | geschlecht | funID | typ | kurator | benutzerID | | idPreRegistration | locationid | isEnable | role | benutzeraktualisiert | status | ltype | ltype | trainer | userId |

und wählen Sie mit der F-Taste userId aus.

+0

können Sie nicht direkt verwenden, wenn Sie sonst außerhalb Verfahren. Ich brauche das gleiche, wenn Bedingungen wie normale MySQL-Abfragen abfragt. Ich hoffe du hast meine Frage verstanden. – Mani

Verwandte Themen