Mehrere Einträge aktualisieren

Wie kann ich das den verhindern? wenn ich das in notepad öffne zeigt er alles untereinander, die beiden spalten sind durch ein komma getrennt. Nach dem zweiten Eintrag vor dem Zeilenumbruch zeigt er jedoch nix. ich zeigs mal hier:


483215;0.176
483216;0.258
505752;0.154


Muss da noch was dahin damit der phpmyadmin beim sql import weiß es ist ne neue Zeile?

Danke für deine Hilfe bisher!

Mag sein, daß Notepad es anders anzeigt. Mein vim kann eigentlich mit DOS und UNIX - Zeilen umgehen, daß es dennoch nicht geht wundert mich. Möglicherweise stolpert der Import darüber, keine Ahnung, nutze weder Excel, MySQL noch PhpMyAdmin. Im übrigen ist der Trenner da ein Semikolon, kein Komma. Auch das kann Quell von Frust sein - oder man sagt bein Import, daß der Delimiter ein ';' ist.

Ich würde übrigens CSV gleich via COPY einlesen:

Code:
test=# \h copy
Command:  COPY
Description: copy data between a file and a table
Syntax:
COPY table_name [ ( column_name [, ...] ) ]
  FROM { 'filename' | PROGRAM 'command' | STDIN }
  [ [ WITH ] ( option [, ...] ) ]

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
  TO { 'filename' | PROGRAM 'command' | STDOUT }
  [ [ WITH ] ( option [, ...] ) ]

where option can be one of:

  FORMAT format_name
  OIDS [ boolean ]
  FREEZE [ boolean ]
  DELIMITER 'delimiter_character'
  NULL 'null_string'
  HEADER [ boolean ]
  QUOTE 'quote_character'
  ESCAPE 'escape_character'
  FORCE_QUOTE { ( column_name [, ...] ) | * }
  FORCE_NOT_NULL ( column_name [, ...] )
  ENCODING 'encoding_name'

test=#

oder aber, ganz clever, via FDW.
 
Zuletzt bearbeitet:
Werbung:
nun aber zum sql befehl.

ich möchte das erst testen, deswegen habe ich die datenbank kopiert. nun wollte ich folgenden befehl ausführen:

Transaktionen wurden schon vor einiger Zeit erfunden ...

UPDATE `s_articles_details_sicherung` SET `weight`=`weight` from `gewichtimport` where `ordernumber`=`ordernumber`

bekomme aber folgenden Fehler:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from `gewichtimport` where `ordernumber`=`ordernumber`' at line 1
Woran liegt das nun wieder?

Kann mir dabei noch jemand helfen? dann wäre das Problem erledigt :)


Ja, schau Dir die Syntax an, wie ich das gemacht habe, und versuch zu verstehen, was da passiert.
 
Code:
UPDATE    s_articles_details_sicherung
SET        weight = (    SELECT    weight
                    FROM    gewichtimport
                    WHERE    gewichtimport.ordernumber = s_articles_details_sicherung.ordernumber )
sollte gehen.
 
Hi,

Danke für deine Antwort.

Also ich habe die Daten ja nun in der CSV hochgeladen. diese liegen in der Tabelle "gewichtimport" in die Spalten "ordernumber" (Die eindeutige Zuordnung soll darüber erfolgen) und "weight", das Feld das neu befüllt werden soll.

Geschrieben werden soll das in die Tabelle "s_articles_details_sicherung" und dort eben auch in das Feld "weight" wenn das Feld "ordernumber" übereinstimmt mit dem aus "gewichtimport".

Nun nehme ich mal dein Beispiel:

Code:
test=> select * from artikel ;
artikel | val
---------+-----
      1 |  10
      2 |  20
      3 |  30
      4 |  40
      5 |  50
      6 |  60
(6 rows)

test=*> select * from csv ;
artikel | val
---------+-----
      2 | 200
      4 | 400
(2 rows)

test=*> update artikel a set val = c.val from csv c where a.artikel=c.artikel;
UPDATE 2
test=*> select * from artikel ;
artikel | val
---------+-----
      1 |  10
      3 |  30
      5 |  50
      6 |  60
      2 | 200
      4 | 400
(6 rows)

Ich verstehe das mit den rows da leider nicht, und weiß nicht welchen Feldnamen ich mit welchem von mir ersetzen muss.

Sorry für mein Unwissen aber ich bin da leider der absolute Leihe.

Danke aber für deine Geduld.

Grüße
 
Hi,

Danke für deine Antwort.

Also ich habe die Daten ja nun in der CSV hochgeladen. diese liegen in der Tabelle "gewichtimport" in die Spalten "ordernumber" (Die eindeutige Zuordnung soll darüber erfolgen) und "weight", das Feld das neu befüllt werden soll.

Geschrieben werden soll das in die Tabelle "s_articles_details_sicherung" und dort eben auch in das Feld "weight" wenn das Feld "ordernumber" übereinstimmt mit dem aus "gewichtimport".

Nun nehme ich mal dein Beispiel:

Code:
test=> select * from artikel ;
artikel | val
---------+-----
      1 |  10
      2 |  20
      3 |  30
      4 |  40
      5 |  50
      6 |  60
(6 rows)

test=*> select * from csv ;
artikel | val
---------+-----
      2 | 200
      4 | 400
(2 rows)

test=*> update artikel a set val = c.val from csv c where a.artikel=c.artikel;
UPDATE 2
test=*> select * from artikel ;
artikel | val
---------+-----
      1 |  10
      3 |  30
      5 |  50
      6 |  60
      2 | 200
      4 | 400
(6 rows)

Ich verstehe das mit den rows da leider nicht, und weiß nicht welchen Feldnamen ich mit welchem von mir ersetzen muss.

Sorry für mein Unwissen aber ich bin da leider der absolute Leihe.

Danke aber für deine Geduld.

Grüße


update s_articles_details_sicherung a set weight=c.weight from gewichtimport where a.ordernumber=c.ordernumber


Ungetestet, mach vorher ne Sicherung oder, besser, mache es in einer Transaktion. (falls Deine Engine das schon kann...)
 
Hallo,

Danke an beide.

Bei deiner Idee akretschner kommt folgende Fehlermeldung:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from gewichtimport where a.ordernumber=c.ordernumber' at line 1

Bei der Idee von ukulele kommt folgende Fehlermeldung:

#1242 - Subquery returns more than 1 row

:-(
 
hallo akreschmer, sorry erstmal für den vertipper im Namen eben.

Leider kommt auch bei deinem 2. Beitrag hier eine Fehlermeldung:

update s_articles_details_sicherung a set weight=c.weight from gewichtimport c where a.ordernumber=c.ordernumber

erzeugt

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from gewichtimport c where a.ordernumber=c.ordernumber' at line 1
 
Unter MS kann die Tabelle im Update Statement, also s_articles_details_sicherung, keinen Alias haben und ich glaube das Subqery muss per Select eingeleitet werden. Aber MySQL ist da auch näher an PG denke ich.

Ist ordernumber wirklich eindeutig in der Import-Tabelle?

Also ergeben diese beiden Abfragen das selbe?
Code:
SELECT    count(ordernumber)
FROM    gewichtimport

SELECT    count(DISTINCT ordernumber)
FROM    gewichtimport
 
Hallo,

auch da kommt folgende meldung wieder:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT count(DISTINCT ordernumber) FROM gewichtimport' at line 4
 
Werbung:
Okay liefern diese beiden Abfragen die selbe Anzahl an Zeilen:

Code:
SELECT    ordernumber
FROM    gewichtimport

SELECT    DISTINCT ordernumber
FROM    gewichtimport
 
Zurück
Oben