2016-12-20 2 views
-2

Guten Abend! Ich habe ein Problem, dass ich nicht herausfinden kann, wie man löst. Die Abfrage, die ich ausführen möchte, sollte jede Person, der E-Mail-Adresse zu einem gegebenen ändern, aber ich erhalte die Fehlermeldung „einreihige Unterabfrage gibt mehr als eine Zeile“"einreihige Unterabfrage gibt mehr als eine Zeile zurück"

update employees 
set email = (select regexp_replace(email,'@([a-z])+','@company') 
       from employees 
      ) 
where id = (select id 
     from employees); 

Was mache ich falsch?

+1

welche RDBMS verwenden Sie hier, mysql oder oracle? 2 verschiedene Tiere hier. –

+0

Was @JNevill sagte; aber Sie können wahrscheinlich die gesamte WHERE-Klausel vollständig loswerden; oder, wenn die Einstellungen ein "UPDATE" verhindern, ersetzen Sie es durch "WHERE 1 = 1" – Uueerdo

Antwort

0
update employees 
set email = regexp_replace(email,'@([a-z])+','@company') 
where id IN (select id from employees); 

Ihre erste Unterabfrage sinnlos ist und nicht funktioniert, Ihr zweite in der WHERE-Klausel muss einen IN-Operator geändert werden.

Darüber hinaus macht die WHERE-Anweisung keinen Sinn. Sie aktualisieren bereits alle IDs in der Employee-Tabelle. Also entferne es einfach.

0

, wenn Ihre zweite Unterabfrage gibt nur eine Zeile, dann können Sie

update employees set email = (select regexp_replace(email,'@([a-z])+','@company') where id = (select id from employees);

sonst verwenden, wenn Ihre zweite Unterabfrage Rückkehr mehr als eine Zeile, dann sollten Sie

verwenden

update employees set email = (select regexp_replace(email,'@([a-z])+','@company') where id IN (select id from employees);

Blockquote

Weil IN nach einem Wert sucht, der durch das Ergebnis der Unterabfrage gegeben ist. Aber '=' erfordert nur einen äquivalenten Wert aus dem Ergebnis der Unterabfrage.

Verwandte Themen