Ankündigung

Einklappen
Keine Ankündigung bisher.

JOIN mit komplexerem Vergleich

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JOIN mit komplexerem Vergleich

    Hi,

    ich habe zwei vorgegebene Tabellen. In jeder dieser Tabellen gibt es eine Spalte ABC in der eine Zahl als varchar steht (Die Tabellen sind nicht von mir sondern kommen aus einem Großkonzern. Also keine Änderung möglich)
    Bei der einen Tabelle ist die Zahl immer auf 15 Stellen mit führenden Nullen aufgefüllt in der anderen nicht. also

    Tabelle A Spalte ABC

    000001234567890

    Tabelle B Spalte ABC

    1234567890

    Ich würde nun gerne aus Tabelle A lesen und Tabelle B joinen wo die Spalten ABC die gleiche Zahl enthalten. Also

    SELECT ... FROM TabelleA LEFT JOIN TabelleB ON (TabelleA.ABC=TabelleB.ABC)

    Das geht so natürlich nicht. Habt ihr eine Idee wie ich das hinbekomme oder muss ich da wirklich erst die TabelleA auslesen und dann für jede Zeile einen neuen Quesry auf Tabelle B machen?

    Gruß

    Claus
    Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

  • #2
    Zitat von Thallius Beitrag anzeigen
    Hi,

    ich habe zwei vorgegebene Tabellen. In jeder dieser Tabellen gibt es eine Spalte ABC in der eine Zahl als varchar steht (Die Tabellen sind nicht von mir sondern kommen aus einem Großkonzern. Also keine Änderung möglich)

    Ich würde nun gerne aus Tabelle A lesen und Tabelle B joinen wo die Spalten ABC die gleiche Zahl enthalten.

    Das geht so natürlich nicht. Habt ihr eine Idee wie ich das hinbekomme

    Schmutzige Lösung: nach INT casten. Vermutlich kann MySQL dann aber keinen Index setzen. Bessere Lösung: den Müll entsorgen.

    Code:
    test=# create table xyz (i text);
    CREATE TABLE
    Time: 2,743 ms
    test=*# create index idx_xyz on xyz((i::int));
    CREATE INDEX
    Time: 1,856 ms
    test=*# \d xyz
        Table "public.xyz"
     Column | Type | Modifiers
    --------+------+-----------
     i      | text |
    Indexes:
        "idx_xyz" btree ((i::integer))
    
    test=*# rollback;
    ROLLBACK
    Time: 1,318 ms
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar

    Lädt...
    X