MySQL dotaz

Sekcia: Programovanie 11.07.2007 | 16:17
Avatar native Fedora 11, FreeBSD  Používateľ
Potrebujem urobit jeden "narocnejsi" dotaz a v oblasti databaz som zatial lama. Neviete pomoct?

Potrebujem prekopirovat niektore data medzi dvoma tabulkami, ale......,

v tabulke items je napriklad id1, v tabulke biblio sa nachadza id2, su to rozdielne hodnoty. id1 a id2 su ale uvedene v poliach tretej tabulky, napriklad: id1 id2
11279 1
11280 2
11281 3
    • Re: MySQL dotaz 11.07.2007 | 18:46
      WlaSaTy   Návštevník
      asi si mal na výučbe počúvať lepšie.

      select a.id1, c.id2 from a, b, c where a.id1=c.id1and b.id2=c.id2
      • Re: MySQL dotaz 12.07.2007 | 14:48
        Avatar native Fedora 11, FreeBSD  Používateľ
        Dakujem za pomoc.

        Pri dotaze:
        INSERT INTO biblio( author )
        SELECT marc_subfield_table.subfieldvalue
        FROM biblio, marc_subfield_table, marc_biblio
        WHERE biblio.biblionumber = marc_biblio.biblionumber
        AND marc_subfield_table.bibid = marc_biblio.bibid
        AND marc_subfield_table.bibid =11280
        AND marc_subfield_table.tag =700

        mi vsak vypisuje nasledovnu chybu:
        MySQL hlási: Dokumentácia
        #1062 - Duplicate entry '0' for key 1

        Da sa s tym nieco urobit?
        • Re: MySQL dotaz 12.07.2007 | 16:44
          Avatar Miroslav Bendík Gentoo  Administrátor
          Jasne, zmenit key 1 aby nebol unique, alebo zmenit hodnotu ktora sa vklada pre key 1. Predpokladam, ze kay 1 je ID a nie je auto_increment.
          • Re: MySQL dotaz 12.07.2007 | 17:09
            Avatar native Fedora 11, FreeBSD  Používateľ
            On nie je nastaveny na unique, pole je typu TEXT..., predvolena hodnota je NULL, cize je prazdne... .
            • Re: MySQL dotaz 12.07.2007 | 17:23
              Avatar Miroslav Bendík Gentoo  Administrátor
              SHOW INDEXES FROM `biblio`;
              Čo vypíše ako prvý riadok?
              • Re: MySQL dotaz 12.07.2007 | 17:39
                Avatar native Fedora 11, FreeBSD  Používateľ
                indexom je len biblionumber, ktory je zaroven aj primarnym klucom.... .

                Ked som skusal:
                UPDATE `biblio` SET `author` = 'test' WHERE `biblio`.`biblionumber` =2

                tak to preslo. fakt nechapem... .
                • Re: MySQL dotaz 12.07.2007 | 17:54
                  Avatar Miroslav Bendík Gentoo  Administrátor
                  INSERT INTO biblio(`biblionumber`, `author` )
                  SELECT MAX(`biblio`.`biblionumber`)+1,marc_subfield_table.subfieldvalue
                  FROM biblio, marc_subfield_table, marc_biblio
                  WHERE biblio.biblionumber = marc_biblio.biblionumber
                  AND marc_subfield_table.bibid = marc_biblio.bibid
                  AND marc_subfield_table.bibid =11280
                  AND marc_subfield_table.tag =700
                  • Re: MySQL dotaz 12.07.2007 | 18:12
                    Avatar native Fedora 11, FreeBSD  Používateľ
                    SQL dopyt:

                    INSERT INTO biblio( `biblionumber` , `author` )
                    SELECT MAX( `biblio`.`biblionumber` ) +1, marc_subfield_table.subfieldvalue
                    FROM biblio, marc_subfield_table, marc_biblio
                    WHERE biblio.biblionumber = marc_biblio.biblionumber
                    AND marc_subfield_table.bibid = marc_biblio.bibid
                    AND marc_subfield_table.bibid =11281
                    AND marc_subfield_table.tag =700
                    MySQL hlási:
                    #1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
                    tabulka uz obsahuje okolo 4500 zaznamov, ale pole author (a mnoho dalsich) je zatial prazdnych.
                    • Re: MySQL dotaz 12.07.2007 | 19:39
                      Avatar Miroslav Bendík Gentoo  Administrátor
                      Hmm, teoreticky by to malo ist s limitom .. ale kaslat na to.
                      Primary key smie byt max 1x! Co znamena, ze bud treba vkladat biblionumber alebo nastavit biblionumber ako auto_increment.
                    • Re: MySQL dotaz 13.07.2007 | 01:38
                      WlaSaTy   Návštevník
                      ešte je možnosť zistiť ten záznam ktorý narúša jedinečnosť sekvencie a opraviť ho. Niektoré SQL jazyky mali niečo podobné:
                      select id, count(*) as how_many_times from tab having count(*) > 1

                      ale či to funguje aj v MySQL, no za pár rokov sa mohlo zmeniť všeličo.
    • Re: MySQL dotaz 16.07.2007 | 09:25
      Avatar native Fedora 11, FreeBSD  Používateľ
      Dakujem za pomoc, musel som opravit niektore zaznamy.
      • Re: MySQL dotaz 16.07.2007 | 13:18
        WlaSaTy   Návštevník
        Odporučil by som ešte jednu vec, aby nenastávali tieto problémy je potrebné nastaviť referenčnú integritu. Toto bolo ako druhý odkaz v google, myslím že je to dosť zrozumiteľné aj pre laika i keď je to v angličtine. A pozor na použitý engine (TYPE = INNODB) pre tabuľky a aj jeho podporu v inštalovanom balíku, teoreticky tam nemusí byť.