Ankündigung

Einklappen
Keine Ankündigung bisher.

Cast??

Einklappen

Neue Werbung 2019

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

  • Cast??

    Hallo,

    habe zwei Tabellen die ich über einen Join verknüpfen muss...

    in Tabelle A habe ich das Feld kg_nr als integer und
    in Tabelle B das dazugehörige Feld kg_nr_f als char(4)

    Gleich vorne weg, ich kann die Tabellen nicht ändern...

    in Tabelle A gibt es die kg_nr '1'
    in Tabelle B heißt sie '0001'

    Somit komme ich über den Join Befehl nicht zueinander...


    habe es folgerndermaße probiert - leider ohne Erfolg

    Code:
    JOIN dbo.kundengruppe kGrp on cast(ku.kg_nr as char(4))=kGrp.kg_nr_f
    Habt Ihr einen Tip für mich??


  • #2
    kg_nr als integer und
    kg_nr_f als char(4)
    Jo, hier ist schon dein Problem...

    in Tabelle A gibt es die kg_nr '1'
    in Tabelle B heißt sie '0001'
    und hier wirkt sich das Problem konkret aus.

    Der Tipp lautet: Zieh die Felddefinitionen und -inhalte "grade"...
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zitat von tobias159 Beitrag anzeigen

      Habt Ihr einen Tip für mich??
      Code:
      test=# select 1::int::char(4);
       bpchar
      --------
       1
      (1 row)
      
      Time: 94,347 ms
      test=*# select '0001'::char(4)::int;
       int4
      ------
          1
      (1 row)
      Tief inhalieren und wirken lassen. Nach einer Weile wirst es spüren.

      Wenn Du das überwunden hast noch damit runterspülen:

      Code:
      test=*# select 1::int = '0001'::char(4)::int;
       ?column?
      ----------
       t
      (1 row)
      Ansonsten den Klumpatsch in die Tonne treten.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Den Fremdschlüssel mit LPAD() oder LTRIM() entsprechend anpassen. Ansonsten kann ich mich auch nur anschließen, korrigiere wenn möglich das eigentliche Problem.

        Kommentar


        • #5
          Zitat von erc Beitrag anzeigen
          Den Fremdschlüssel mit LPAD() oder LTRIM() entsprechend anpassen. Ansonsten kann ich mich auch nur anschließen, korrigiere wenn möglich das eigentliche Problem.
          An einem String rumschnippeln ist kein casten, könnte aber aufgrund der Typblindheit von MySQL sogar funktionieren. Solange, bis MySQL das irgendwann mal lernt...

          Code:
          test=*# select 1::int = '1'::char(4);
          ERROR:  operator does not exist: integer = character
          LINE 1: select 1::int = '1'::char(4);
                                ^
          HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
          Time: 0,524 ms
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Es ist eine besch...eidene Idee, Fremdschlüsselbeziehungen zwischen Feldern unterschiedlichen Datentyps anzulegen.
            Das Gefrickel mit Casten, Beschneiden oder trimmen/padden ist Murks (also bitte nicht weiter Empfehlungen in diese Richtung aussprechen).
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Zitat von lstegelitz Beitrag anzeigen
              Es ist eine besch...eidene Idee, Fremdschlüsselbeziehungen zwischen Feldern unterschiedlichen Datentyps anzulegen.
              Das Gefrickel mit Casten, Beschneiden oder trimmen/padden ist Murks (also bitte nicht weiter Empfehlungen in diese Richtung aussprechen).
              !

              Zumal sich ein echter Foreign-Key-Constraint bei den vorhandenen Datentypen ja auch gar nicht definieren lässt.

              Kommentar


              • #8
                Zitat von Tropi Beitrag anzeigen
                !

                Zumal sich ein echter Foreign-Key-Constraint bei den vorhandenen Datentypen ja auch gar nicht definieren lässt.
                Klar, MyISAM fezt
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Ich muss an dieser Stelle raten, aber ich schätze ein entsprechendes Statement würde sogar bei MyISAM nicht klappen. Wobei sich bei MyISAM die Frage stellt, ob es überhaupt einen Unterschied macht ob das Statement einen Syntax-Fehler wirft oder nicht...

                  Kommentar


                  • #10
                    Hi zusammen,

                    ich versteh das Problem nicht ganz. LEFT JOIN geht doch wunderbar.

                    Code:
                    mysql> SELECT kgi.*,kgc.*
                        ->  FROM kgi
                        ->  LEFT JOIN kgc ON kgc.kg_nr_f = kgi.kg_nr;
                    +----+-------+------------+------+---------+--------------+
                    | id | kg_nr | kg_nr_text | id   | kg_nr_f | kg_nr_f_text |
                    +----+-------+------------+------+---------+--------------+
                    |  1 |     1 | EINS       |    1 | 0001    | eins         |
                    |  2 |     2 | ZWEI       |    2 | 0002    | zwei         |
                    |  3 |     3 | DREI       |    3 | 0003    | drei         |
                    +----+-------+------------+------+---------+--------------+
                    3 rows in set (0,00 sec)
                    
                    mysql>
                    mysql>  SELECT kgi.*,kgc.*
                        ->  FROM kgc
                        ->  LEFT JOIN kgi ON kgc.kg_nr_f = kgi.kg_nr;
                    +------+-------+------------+----+---------+--------------+
                    | id   | kg_nr | kg_nr_text | id | kg_nr_f | kg_nr_f_text |
                    +------+-------+------------+----+---------+--------------+
                    |    1 |     1 | EINS       |  1 | 0001    | eins         |
                    |    2 |     2 | ZWEI       |  2 | 0002    | zwei         |
                    |    3 |     3 | DREI       |  3 | 0003    | drei         |
                    +------+-------+------------+----+---------+--------------+
                    3 rows in set (0,00 sec)
                    
                    mysql>
                    und hier noch die Tabellen

                    Code:
                    mysql> describe kgc;
                    +--------------+------------------+------+-----+---------+----------------+
                    | Field        | Type             | Null | Key | Default | Extra          |
                    +--------------+------------------+------+-----+---------+----------------+
                    | id           | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
                    | kg_nr_f      | char(4)          | YES  |     | NULL    |                |
                    | kg_nr_f_text | varchar(32)      | YES  |     | NULL    |                |
                    +--------------+------------------+------+-----+---------+----------------+
                    3 rows in set (0,01 sec)
                    
                    mysql> describe kgi;
                    +------------+------------------+------+-----+---------+----------------+
                    | Field      | Type             | Null | Key | Default | Extra          |
                    +------------+------------------+------+-----+---------+----------------+
                    | id         | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
                    | kg_nr      | int(11)          | YES  |     | NULL    |                |
                    | kg_nr_text | varchar(32)      | YES  |     | NULL    |                |
                    +------------+------------------+------+-----+---------+----------------+
                    3 rows in set (0,01 sec)
                    
                    mysql> select * from kgc;
                    +----+---------+--------------+
                    | id | kg_nr_f | kg_nr_f_text |
                    +----+---------+--------------+
                    |  1 | 0001    | eins         |
                    |  2 | 0002    | zwei         |
                    |  3 | 0003    | drei         |
                    +----+---------+--------------+
                    3 rows in set (0,00 sec)
                    
                    mysql> select * from kgi;
                    +----+-------+------------+
                    | id | kg_nr | kg_nr_text |
                    +----+-------+------------+
                    |  1 |     1 | EINS       |
                    |  2 |     2 | ZWEI       |
                    |  3 |     3 | DREI       |
                    +----+-------+------------+
                    3 rows in set (0,00 sec)
                    
                    mysql> select VERSION();
                    +-----------+
                    | VERSION() |
                    +-----------+
                    | 5.6.21    |
                    +-----------+
                    1 row in set (0,00 sec)
                    
                    mysql>
                    Hab wohl keinen INDEX gesetzt.

                    Gruss

                    Bernd

                    Kommentar


                    • #11
                      Fix it! Do it now!

                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Zitat von BerndB Beitrag anzeigen
                        Hi zusammen,

                        ich versteh das Problem nicht ganz.

                        Dann lies den Rest des Threads, schalt den Strict-Mode an und probiere das mit Tabellen die mehr als 10 Millionen Rows haben.
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          probiere das mit Tabellen die mehr als 10 Millionen Rows haben
                          Nun bleibt doch mal auf dem Teppich. Nach 9999 Rows ist diese Struktur mit char(4) doch finito ..

                          Zitat von tobias159 Beitrag anzeigen
                          Gleich vorne weg, ich kann die Tabellen nicht ändern...
                          Wie von erc schon vorgeschlagen:

                          PHP-Code:
                          ..  ON LPAD(ku.kg_nr,4,'0000')=kGrp.kg_nr_f 
                          PHP-Klassen auf github

                          Kommentar


                          • #14
                            Bis dann jemand es schafft, in das char(4) Feld auch Buchstaben und Sonderzeichen einzuschmuggeln...
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Zitat von lstegelitz Beitrag anzeigen
                              Bis dann jemand es schafft, in das char(4) Feld auch Buchstaben und Sonderzeichen einzuschmuggeln...
                              Ach Quatsch, dafür gibt es doch Check-Constraints. Also, zumindest kann man die definieren ...
                              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                              Kommentar

                              Lädt...
                              X