2017-10-11 2 views
1

Ich muss ein table1 mit einem Wert von table2 unter einer Bedingung der ersten drei Zeichen aktualisiert werden.Wie aktualisiert man eine Zeile mit einem Teil der Zeichenfolge aus einer anderen Tabelle - mysql?

Also habe ich:

update lead_db l1 
inner join option_nat n1 on n1.nat_title=left(l1.ld_naty,3) 
set l1.ld_ncode=n1.nat_id 

Aber es ist nichts passiert. Bitte sag mir, was ich hier falsch gemacht habe!

+1

Ist 'nat_title' EXAKT gleich den 3 Zeichen der anderen Zeichenfolge? Zeigen Sie uns Beispiele ihrer Werte – SubjectDelta

+0

Nein 'nat_title' ist länger als 3. Aber ich brauche nur die ersten 3 Zeichen von' ld_naty' zu suchen. – Wilf

Antwort

1

Sie können dies versuchen und lassen Sie mich wissen, wenn es nicht funktioniert.

update lead_db l1, option_nat n1 
set l1.ld_ncode=n1.nat_id 
where n1.nat_title regexp left(l1.ld_naty,3) 
+1

Ihre Lösung funktioniert. Wechseln Sie einfach von '=' zu 'regexp' - Prost! – Wilf

+0

Ja richtig ... lesen Sie einfach Ihren Kommentar, dass 'nat_title' länger als 3 ist. Prost! – batMan

0

Versuchen Sie, diese

UPDATE lead_db l1 
INNER JOIN option_nat n1 
ON n1.nat_title LIKE CONCAT(LEFT(l1.ld_naty,3), '%') 
SET l1.ld_ncode = n1.nat_id 

Denn wenn ihre Werte sind zum Beispiel ABCDEF und ABC123, der Vergleich zwischen ABCDEF und ABC falsch ist! Aber wenn Sie versuchen, mit ABCDEF LIKE "ABC%" wird es funktioniert ...

0

Der Grund, warum nichts passiert, ist, weil die Datenbank den Join nicht ausführen kann, den Sie ihm vorschreiben. Wenn nat_title länger als 3 Zeichen ist (wie Sie in Ihrem Kommentar gesagt haben), dann gibt es nichts hinzuzufügen.

Beispiel: Nehmen wir an, nat_title enthält den Wert "Dies ist ein Beispiel" und ld_naty enthält nur "Thi". Du versuchst nun, "This is an example" bei "Thi" beizutreten, was offensichtlich nicht funktioniert, weil es nicht das gleiche ist.

Sie brauchen etwas wie folgt aus:

UPDATE lead_db l1 
INNER JOIN option_nat n1 on n1.nat_title LIKE CONCAT(LEFT(l1.ld_naty,3), '%') 
SET l1.ld_ncode = n1.nat_id 

aber sicher sein, dass dies wirklich ist, was Sie wollen. Denn jetzt "Dies ist ein Beispiel" würde auf alles, die mit den Buchstaben "Thi" beginnt (und es ist nicht einmal Groß-und Kleinschreibung, so "tHi" wäre eine gültige Join als auch) verbunden werden.

Verwandte Themen