2017-07-08 4 views
0

Ich möchte diese beiden Abfragen miteinander verknüpfen, anstatt sie beide zu unterschiedlichen Zeiten ausgeführt werden.MySQL Update Spalte Wert, wo sonst eine andere Spalte Wert (einzelne Abfrage)

UPDATE `table` SET `column_one` = @value WHERE `column_one_key` = @key LIMIT 1; 

und auch diese Abfrage;

UPDATE `table` SET `column_two` = @value WHERE `column_two_key` = @key LIMIT 1; 

So etwas aber kann nicht scheinen, um es zu bekommen

UPDATE `table` (SET `column_one` = @value WHERE `column_one_key` = @key) || (SET `column_two` = @value WHERE `column_two_key` = @key) LIMIT 1; 

einige zusätzliche Informationen

column_one_key und column_two_key zu arbeiten sind nie gleich, weshalb Sie OR verwenden.

+0

Das 'Limit' macht das ziemlich schwierig. Belassen Sie dies als zwei separate Abfragen. –

+0

Ich würde fragen, warum benutzen Sie die 'LIMIT'? Können Sie einige Beispieldaten zeigen und wie es aussehen würde, nachdem diese Befehle ausgeführt wurden? –

+0

Nur um die Abfrage zu stoppen, nachdem der Wert aktualisiert wurde? Da es keine doppelten Einträge in der Tabelle geben wird. Es ist im Grunde eine Tabelle, die verwendet wird, um zwei Felder aus einer anderen Tabelle miteinander zu verknüpfen. Es enthält jedoch zusätzliche Daten zu jedem verknüpften Element. Dies ist die Spalte, die ich einstellen möchte. – Jake

Antwort

2

Wenn Sie nicht brauchen die limit (das heißt, ein Spiel pro Taste), können Sie tun:

UPDATE `table` 
    SET column_one = (CASE WHEN @key = column_one_key THEN @value ELSE column_one END), 
     column_two = (CASE WHEN @key = column_two_key THEN @value ELSE column_two END) 
    WHERE @key IN (column_one_key, column_two_key); 

Ich denke, zwei Updates einfacher. Und wenn Sie die limit benötigen, dann sind zwei Updates definitiv ein einfacher Ansatz.

-1

versuchen, etwas wie folgt aus:

UPDATE `table` SET `column_one` = @value, `column_two` = @value WHERE `column_one_key` = @key AND `column_two_key` = @key LIMIT 1; 
+0

column_one_key und column_two_key sind niemals gleich. Das würde also nicht funktionieren. Mit 'oder' würde dies auch nicht funktionieren, da beide Werte gesetzt würden. Sollte column_one nur dann setzen, wenn column_one_key gleich ist, und column_two nur dann setzen, wenn column_two_key gleich ist – Jake

Verwandte Themen