Announcement

Collapse
No announcement yet.

mysqldump - Where mit Alias

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mysqldump - Where mit Alias

    Hallo,
    leider schon meine dritte Frage in kurzer Zeit, aber ich komme einfach nicht über die Hürde einer komplizierte Query.
    Ich muss die Datensätze dumpen, die mit folgendem SELECT angezogen werden:
    Code:
    select * from t152 a where exists (select 1 from t152 b where HKP01='5201'  and STR_TO_DATE(HKP02,'%d.%m.%y')>'2019-06-20' and a.T152_ID130=b.T152_ID130 and a.HKP03=b.HKP03);
    Das sollte in den WHERE= Schalter von mysqldump (mysqldump where=). Aber Aliase werden nicht angenommen. Am Design der Tabelle kann nichts geändert werden. Sie sieht so aus:
    Code:
    -- Table "t152" DDL
    
    CREATE TABLE `t152` (
      `HKP01` varchar(4) COLLATE latin1_german2_ci DEFAULT '',
      `HKP02` varchar(90) COLLATE latin1_german2_ci DEFAULT '',
      `HKP03` int(11) DEFAULT NULL,
      `T152_ID130` int(11) DEFAULT NULL,
      KEY `stammnr` (`T152_ID130`,`HKP01`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
    Hier ein Auszug aus der t152:

    HKP01 HKP02 HKP03 T152_ID130
    '5201' '11.04.19' '28' '1077'
    '-170' 'Verband' '28' '1077'
    '-103' 'E11.72' '28' '1077'
    '-102' 'Siltec Sorbact''28' '1077'
    '-105' '07.08.' '28' '1077'
    '-101' 'ca 1.5x1cm' '28' '1077'
    '-065' 'K46.2' '28' '1077'
    '5201' '18.05.19' '29' '6708'
    '-111' 'Dekubitus' '29' '6708'
    '-003' '1x1cm' '29' '6708'
    '-092' 'Octenisept' '29' '6708'
    '-105' '07.08.19' '29' '6708'
    '-101' 'ca 1.5x1cm' '29' '6708'
    '-010' 'I87.21L' '29' '6708'
    '5201' '08.08.19' '18' '877'
    '-106' 'Lomatüll Gaze' '18' '877'
    '-113' '1x1cm' '18' '877'
    '-052' 'Allevyn' '18' '877'
    '-045' '07.08.' '18' '877'
    '-131' 'ca 1.5x1cm' '18' '877'
    '-008' 'A87.1' '18' '877'

    '5201' '11.08.19' '29' '1077'
    '-170' 'Gaze' '29' '1077'
    '-103' 'U31.2' '29' '1077'
    '-102' 'Siltec Sorbact''29' '1077'


    Gleiche ID's gehören immer zu einem bestimmten Patienten und gleiche HKP03 zu einem Formular. Es geht darum, die Formulare ab einem bestimmten Datum (steht in HKP01='5201') zu dumpen. Mit obigen SELECT werden die fett markierten Rows selektiert (Patient 877 mit Formular 18 und Patient 1077 mit Formular 29, beide nach dem 20.06.19 erstellt). Den Dump will ich in die gleiche Tabelle auf einem anderen Server zwecks Datenabgleich importieren. Mit mysqldump würde ich mit dieser Methode nur ca. 1000 Sätze statt 60 000 verarbeiten müssen.

    Ich weiss, dass es sehr viel verlangt ist, wenn sich jemand da hinein denken sollte. Aber ich wäre wirklich unendlich dankbar, wenn ein Profi diese Nuss knacken könnte. Mein Horizont ist dafür leider zu klein ...

    Viele Grüße
    Norbert

  • #2
    Warum erzeugst du mit dem Statement keine temp. extra Tabelle
    create table tmp_table as
    select....

    und nimmst diese für den dump...

    https://www.techonthenet.com/mysql/t...e_table_as.php
    Christian

    Comment


    • #3
      oder
      mysql -e "select * from myTable <plus meineAbgedrehteWhereclause und andere Tabellen>" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt
      same same but different

      Comment


      • #4
        Auf euch ist Verlass, wenn man auf eine Antwort wartet. DANKE!
        Ich bevorzuge die Variante von Christian (bin ich nicht drauf gekommen). Aber create table ... as select ist mir nicht so geläufig (müsste ich erst ein paar Tests machen). Ich machs lieber in zwei Schritten:
        Code:
        create table sicherung.t152x LIKE praxis1.t152
        insert into sicherung.t152x select * from praxis1.t152 a where exists (select 1 from praxis1.t152 b where HKP01='5201'  and STR_TO_DATE(HKP02,'%d.%m.%y')>'2019-06-20' and a.T152_ID130=b.T152_ID130 and a.HKP03=b.HKP03);
        Dann t152x dumpen und Server wechseln.
        In der T152 auf dem Zielserver evt. vorhandene Sätze löschen:
        Code:
        delete from t152 a where exists (select 1 from t152 b where HKP01='5201'  and STR_TO_DATE(HKP02,'%d.%m.%y')>'2019-06-20' and a.T152_ID130=b.T152_ID130 and a.HKP03=b.HKP03)
        und Dump importieren.
        Mit einer richtigen WHERE-Klausel in mysqldump wäre es eleganter. Aber wer will das austesten ...
        Geholfen hätte mir noch, wenn ich die temp. Table t152x gleich auf dem Zielserver (hier localhost) ausgehend von der t152 auf dem Quellserver erstellen könnte. Dann brauchte ich gar keinen Dump und alles wäre ganz einfach (insert into ... select from ...) Aber daran hab ich mich schon stundenlang ohne Erfolg versucht.

        Comment


        • #5
          Originally posted by strzata View Post
          Geholfen hätte mir noch, wenn ich die temp. Table t152x gleich auf dem Zielserver (hier localhost) ausgehend von der t152 auf dem Quellserver ..
          Ich bin nicht der mysql Spezi, aber auch da gibt es sowas wie DB Links zwischen verschiedenen DB, allerdings nach meiner (veralteten?) Kenntnis nur bei DB, die sich auf einem System befinden, nicht bei entfernten DB.

          Comment

          Working...
          X