| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Sammenlægning af to tabeller går ud Fra : Brian Bendtsen | 
  Dato :  25-04-08 10:46 |  
  |   
            Hej
 
 Jeg står overfor en situation hvor jeg skal have flyttet data fra én 
 mysql database til en anden.
 
 Jeg har importeret tabellerne fra gammel til ny database og i de 
 tilfælde hvor tabellerne er nogenlunde ens i struktur er der ingen 
 problemer.
 
 Der er dog det problem at jeg godt kunne tænke mig at sammenlægge to 
 tabeller til én. Dette vil dog betyde at der er en masse relationer der 
 vil gå i stykker.
 
 Forestil jer at vi har to tabeller: opskrifter_italien og 
 opskrifter_frankrig med de samme felter
 
 Jeg vil sammenlægge disse så jeg har en tabel der hedder opskrifter, med 
 et ekstra felt der hedder land, som så kan indehold italien og frankrig 
 osv. skulle jeg have lyst til at udvide senere hen.
 
 Problemet er bare at jeg har en del andre tabeller der relatere til de 
 originale tabeller. Når jeg sammensmelter tabellerne vil opskrifterne få 
 nye id-numre.
 
 Er der nogen der har et godt tip til hvordan jeg ved brug af sql kan 
 opdatere relationerne så de kommer til at passe?
 
 Håber problemet er tydeligt nok beskrevet.
 
 På forhånd tak.
 
 mvh. Brian
  
            
             |   |   
            
        
 
            
         
           Kristian Damm Jensen (25-04-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  25-04-08 15:00 |  
  |   
            Brian Bendtsen wrote:
 > Hej
 >
 > Jeg står overfor en situation hvor jeg skal have flyttet data fra én
 > mysql database til en anden.
 >
 > Jeg har importeret tabellerne fra gammel til ny database og i de
 > tilfælde hvor tabellerne er nogenlunde ens i struktur er der ingen
 > problemer.
 >
 > Der er dog det problem at jeg godt kunne tænke mig at sammenlægge to
 > tabeller til én. Dette vil dog betyde at der er en masse relationer
 > der vil gå i stykker.
 >
 > Forestil jer at vi har to tabeller: opskrifter_italien og
 > opskrifter_frankrig med de samme felter
 >
 > Jeg vil sammenlægge disse så jeg har en tabel der hedder opskrifter,
 > med et ekstra felt der hedder land, som så kan indehold italien og
 > frankrig osv. skulle jeg have lyst til at udvide senere hen.
 >
 > Problemet er bare at jeg har en del andre tabeller der relatere til de
 > originale tabeller. Når jeg sammensmelter tabellerne vil opskrifterne
 > få nye id-numre.
 >
 > Er der nogen der har et godt tip til hvordan jeg ved brug af sql kan
 > opdatere relationerne så de kommer til at passe?
 
 Start med en overførsel til opskrifter_tmp
 
 create opskrifter_tmp(
 id int not null,
 id_fr int not null, -- id fra opskrifter_frankrig
 id_it int not null, -- id fra opskrifter_italien
 ....
 )
 
 Lav dernæst de nødvendige opdateringer:
 
 update reference_tabel_frankring
 set fremmed_noegle = (select id_fr from from opskrifter_tmp where 
 fremmed_noegle = id_fr)
 
 Dette er lavet i standard SQL. Det sidste kan sikkert optimeres, men jeg er 
 ikke så godt inde i MySQLs understøttelse af ikke-standard SQL (og det er 
 hvad der skal til for at lave optimeringen).
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
           Brian Bendtsen (28-04-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  28-04-08 12:27 |  
  |   
            Kristian Damm Jensen skrev:
 > 
 > Start med en overførsel til opskrifter_tmp
 > 
 > create opskrifter_tmp(
 > id int not null,
 > id_fr int not null, -- id fra opskrifter_frankrig
 > id_it int not null, -- id fra opskrifter_italien
 > ...
 > )
 > 
 > Lav dernæst de nødvendige opdateringer:
 > 
 > update reference_tabel_frankring
 > set fremmed_noegle = (select id_fr from from opskrifter_tmp where 
 > fremmed_noegle = id_fr)
 > 
 > Dette er lavet i standard SQL. Det sidste kan sikkert optimeres, men jeg er 
 > ikke så godt inde i MySQLs understøttelse af ikke-standard SQL (og det er 
 > hvad der skal til for at lave optimeringen).
 > 
 Det ser rigtig fornuftigt ud, takker.
 
 /Brian
  
            
             |   |   
            
        
 
            
         
            Brian Bendtsen (29-04-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  29-04-08 08:51 |  
  |   
            Brian Bendtsen skrev:
 > Kristian Damm Jensen skrev:
 >>
 >> Start med en overførsel til opskrifter_tmp
 >>
 >> create opskrifter_tmp(
 >> id int not null,
 >> id_fr int not null, -- id fra opskrifter_frankrig
 >> id_it int not null, -- id fra opskrifter_italien
 >> ...
 >> )
 >>
 >> Lav dernæst de nødvendige opdateringer:
 >>
 >> update reference_tabel_frankring
 >> set fremmed_noegle = (select id_fr from from opskrifter_tmp where 
 >> fremmed_noegle = id_fr)
 >>
 >> Dette er lavet i standard SQL. Det sidste kan sikkert optimeres, men 
 >> jeg er ikke så godt inde i MySQLs understøttelse af ikke-standard SQL 
 >> (og det er hvad der skal til for at lave optimeringen).
 >>
 > Det ser rigtig fornuftigt ud, takker.
 > 
 > /Brian
 
 Jeg lavede en smule om på din sql sætning så den kom til at se således ud:
 
 update reference_tabel_frankring
 set fremmed_noegle = (select id from opskrifter_tmp where fremmed_noegle 
 = id_fr)
 
 - Eller får fremmednøgle vel samme værdi som før?
 
 Jeg får denne sql fejl når jeg forsøger at opdatere id i de tabeller der 
 relatere til den nye tabel:
 
 #1242 - Subquery returns more than 1 row
 
 Men afvikler jeg subquery'et alene resultere det i en række, altså en værdi.
 
 Hvordan kan det være? Tolker jeg fejlbeskeden forkert?
 
 /Brian
  
            
             |   |   
            
        
 
            
         
             Kristian Damm Jensen (29-04-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  29-04-08 14:19 |  
  |   
            Brian Bendtsen wrote:
 > Brian Bendtsen skrev:
 >> Kristian Damm Jensen skrev:
 >>>
 >>> Start med en overførsel til opskrifter_tmp
 >>>
 >>> create opskrifter_tmp(
 >>> id int not null,
 >>> id_fr int not null, -- id fra opskrifter_frankrig
 >>> id_it int not null, -- id fra opskrifter_italien
 >>> ...
 >>> )
 >>>
 >>> Lav dernæst de nødvendige opdateringer:
 >>>
 >>> update reference_tabel_frankring
 >>> set fremmed_noegle = (select id_fr from from opskrifter_tmp where
 >>> fremmed_noegle = id_fr)
 >>>
 >>> Dette er lavet i standard SQL. Det sidste kan sikkert optimeres, men
 >>> jeg er ikke så godt inde i MySQLs understøttelse af ikke-standard
 >>> SQL (og det er hvad der skal til for at lave optimeringen).
 >>>
 >> Det ser rigtig fornuftigt ud, takker.
 >>
 >> /Brian
 >
 > Jeg lavede en smule om på din sql sætning så den kom til at se
 > således ud:
 > update reference_tabel_frankring
 > set fremmed_noegle = (select id from opskrifter_tmp where
 > fremmed_noegle = id_fr)
 >
 > - Eller får fremmednøgle vel samme værdi som før?
 
 Rigtigt. Det var en smutter.
 
 > Jeg får denne sql fejl når jeg forsøger at opdatere id i de tabeller
 > der relatere til den nye tabel:
 >
 > #1242 - Subquery returns more than 1 row
 >
 > Men afvikler jeg subquery'et alene resultere det i en række, altså en
 > værdi.
 
 For alle værdier af id_fr ? Det kunne tyde på at der er en dublet i dine 
 oprindelige data.
 
 Prøv at køre
 
 select id , count(*)
 from opskrifter_tmp
 join reference_tabel_frankring
 on fremmed_noegle = id_fr
 group by id
 having count(*)>1
 
 Den skulle gerne give dig et tomt resultatsæt.
 
 > Hvordan kan det være? Tolker jeg fejlbeskeden forkert?
 
 Det er også muligt at mySQL danner denne besked på oversættelsestidspunktet; 
 at den analyser sætningen og konstaterer, at den pågældende sub-query *kan* 
 returnere mere end én række. Det ville nu undre mig. Hvis det imidlertid er 
 tilfældet kan du omgå det ved at lave en min(..).
 
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
              Brian Bendtsen (30-04-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  30-04-08 11:58 |  
  |   
            Hej Kristian
 
 Kristian Damm Jensen skrev:
 
 > For alle værdier af id_fr ? Det kunne tyde på at der er en dublet i dine 
 > oprindelige data.
 > 
 > Prøv at køre
 > 
 > select id , count(*)
 > from opskrifter_tmp
 > join reference_tabel_frankring
 > on fremmed_noegle = id_fr
 > group by id
 > having count(*)>1
 > 
 > Den skulle gerne give dig et tomt resultatsæt.
 
 Jeg får faktisk temmelig mange resultater, men det er vel fordi jeg har 
 en en-til-mange relation mellem min opskrifter_italien tabel og min 
 ingredienser tabel, for at tage et eksempel.
 
 Så ingredienser tabellen ser nogenlunde sådan ud:
 
 ID - ingrediensnavn - opskrifter_italien_id(fremmed_noegle)
 1   hvidløg      1
 2   pastaskruer   1
 
 /Brian Bendtsen
  
            
             |   |   
            
        
 
            
         
               Kristian Damm Jensen (30-04-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  30-04-08 14:08 |  
  |   
            Brian Bendtsen wrote:
 > Hej Kristian
 >
 > Kristian Damm Jensen skrev:
 >
 >> For alle værdier af id_fr ? Det kunne tyde på at der er en dublet i
 >> dine oprindelige data.
 >>
 >> Prøv at køre
 >>
 >> select id , count(*)
 >> from opskrifter_tmp
 >> join reference_tabel_frankring
 >> on fremmed_noegle = id_fr
 >> group by id
 >> having count(*)>1
 >>
 >> Den skulle gerne give dig et tomt resultatsæt.
 >
 > Jeg får faktisk temmelig mange resultater, men det er vel fordi jeg
 > har en en-til-mange relation mellem min opskrifter_italien tabel og
 > min ingredienser tabel, for at tage et eksempel.
 
 Ja min fejl. Jeg glemte at det var tabeller, hvori det nye id skulle være 
 fremmenøgle vi talte om. Kør i stedet:
 
 select id , count(*)
 from opskrifter_tmp
 where exists (select * from reference_tabel_frankring on fremmed_noegle = 
 id_fr)
 group by id
 having count(*)>1
 
 Dén bør i al fald ikke give nogen resultater.
 
 Og svarer i øvrigt også logisk bedre til den update, du forsøger at køre.
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
                Brian Bendtsen (05-05-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  05-05-08 22:53 |  
  |   
            Kristian Damm Jensen skrev:
 > Brian Bendtsen wrote:
 >> Hej Kristian
 >>
 >> Kristian Damm Jensen skrev:
 >>
 >>> For alle værdier af id_fr ? Det kunne tyde på at der er en dublet i
 >>> dine oprindelige data.
 >>>
 >>> Prøv at køre
 >>>
 >>> select id , count(*)
 >>> from opskrifter_tmp
 >>> join reference_tabel_frankring
 >>> on fremmed_noegle = id_fr
 >>> group by id
 >>> having count(*)>1
 >>>
 >>> Den skulle gerne give dig et tomt resultatsæt.
 >> Jeg får faktisk temmelig mange resultater, men det er vel fordi jeg
 >> har en en-til-mange relation mellem min opskrifter_italien tabel og
 >> min ingredienser tabel, for at tage et eksempel.
 > 
 > Ja min fejl. Jeg glemte at det var tabeller, hvori det nye id skulle være 
 > fremmenøgle vi talte om. Kør i stedet:
 > 
 > select id , count(*)
 > from opskrifter_tmp
 > where exists (select * from reference_tabel_frankring on fremmed_noegle = 
 > id_fr)
 > group by id
 > having count(*)>1
 > 
 > Dén bør i al fald ikke give nogen resultater.
 > 
 > Og svarer i øvrigt også logisk bedre til den update, du forsøger at køre.
 > 
 Har lige lavet et par andre opgaver i mellemtiden. Jeg får en sql fejl 
 når jeg forsøger ovenstående. Men beskeden fortæller desværre ikke noget 
   om hvori fejlen består.
 
 /Brian
  
            
             |   |   
            
        
 
            
         
                 Kristian Damm Jensen (06-05-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  06-05-08 05:54 |  
  |   
            Brian Bendtsen wrote:
 > Kristian Damm Jensen skrev:
 <snip>
 >> select id , count(*)
 >> from opskrifter_tmp
 >> where exists (select * from reference_tabel_frankring on
 >> fremmed_noegle = id_fr)
 >> group by id
 >> having count(*)>1
 
 <snip>
 
 > Har lige lavet et par andre opgaver i mellemtiden. Jeg får en sql fejl
 > når jeg forsøger ovenstående. Men beskeden fortæller desværre ikke
 >  noget om hvori fejlen består.
 
 Hvad er fejlen?
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm 
 
 
  
            
             |   |   
            
        
 
            
         
                  Brian Bendtsen (06-05-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  06-05-08 07:35 |  
  |   
            Kristian Damm Jensen skrev:
 > Brian Bendtsen wrote:
 >> Kristian Damm Jensen skrev:
 > <snip>
 >>> select id , count(*)
 >>> from opskrifter_tmp
 >>> where exists (select * from reference_tabel_frankring on
 >>> fremmed_noegle = id_fr)
 >>> group by id
 >>> having count(*)>1
 > 
 > <snip>
 > 
 >> Har lige lavet et par andre opgaver i mellemtiden. Jeg får en sql fejl
 >> når jeg forsøger ovenstående. Men beskeden fortæller desværre ikke
 >>  noget om hvori fejlen består.
 > 
 > Hvad er fejlen?
 > 
 
 #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1 
 LIMIT 0, ' at line 1
 
 Kan du få noget ud af det?
 
 Mvh. Brian
  
            
             |   |   
            
        
 
            
         
                   Gert Krabsen (06-05-2008) 
         
	
            | Kommentar Fra : Gert Krabsen | 
  Dato :  06-05-08 07:59 |  
  |  
 
            Brian Bendtsen skrev:
 > Kristian Damm Jensen skrev:
 >> Brian Bendtsen wrote:
 >>> Kristian Damm Jensen skrev:
 >> <snip>
 >>>> select id , count(*)
 >>>> from opskrifter_tmp
 >>>> where exists (select * from reference_tabel_frankring on
 >>>> fremmed_noegle = id_fr)
 >>>> group by id
 >>>> having count(*)>1
 >>
 >> <snip>
 >>
 >>> Har lige lavet et par andre opgaver i mellemtiden. Jeg får en sql fejl
 >>> når jeg forsøger ovenstående. Men beskeden fortæller desværre ikke
 >>>  noget om hvori fejlen består.
 >>
 >> Hvad er fejlen?
 >>
 > 
 > #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1 
 > LIMIT 0, ' at line 1
 > 
 > Kan du få noget ud af det?
 > 
 > Mvh. Brian
 Ja da, den fortæller præcist hvor problemet er:
 'on fremmed_nogle = id_fr'
 Den indskudte sub-select lyder
 'select * from reference_tabel_frankring on fremmed_noegle = id_fr'
 ...og det er jo noget henrivende vås   
            
             |   |   
            
        
 
            
         
                    Brian Bendtsen (06-05-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  06-05-08 09:02 |  
  |  
 
            Gert Krabsen skrev:
 > Brian Bendtsen skrev:
 >> Kristian Damm Jensen skrev:
 >>> Brian Bendtsen wrote:
 >>>> Kristian Damm Jensen skrev:
 >>> <snip>
 >>>>> select id , count(*)
 >>>>> from opskrifter_tmp
 >>>>> where exists (select * from reference_tabel_frankring on
 >>>>> fremmed_noegle = id_fr)
 >>>>> group by id
 >>>>> having count(*)>1
 >>>
 >>> <snip>
 >>>
 >>>> Har lige lavet et par andre opgaver i mellemtiden. Jeg får en sql fejl
 >>>> når jeg forsøger ovenstående. Men beskeden fortæller desværre ikke
 >>>>  noget om hvori fejlen består.
 >>>
 >>> Hvad er fejlen?
 >>>
 >>
 >> #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1 
 >> LIMIT 0, ' at line 1
 >>
 >> Kan du få noget ud af det?
 >>
 >> Mvh. Brian
 > 
 > Ja da, den fortæller præcist hvor problemet er:
 > 'on fremmed_nogle = id_fr'
 > 
 > 
 > Den indskudte sub-select lyder
 > 
 > 'select * from reference_tabel_frankring on fremmed_noegle = id_fr'
 > 
 > ..og det er jo noget henrivende vås   
> 
 > 
 Har du et forslag til en sql der opdaterer fremmednøglen i min reference 
 tabel?
 /Brian
            
              |   |   
            
        
 
            
         
                   Kristian Damm Jensen (06-05-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  06-05-08 14:13 |  
  |   
            Brian Bendtsen wrote:
 <snip>
 > #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1
 > LIMIT 0, ' at line 1
 >
 > Kan du få noget ud af det?
 
 Ret "on" til "where".
 
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
 
 
  
            
             |   |   
            
        
 
            
         
                    Brian Bendtsen (06-05-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  06-05-08 16:08 |  
  |   
            Kristian Damm Jensen skrev:
 > Brian Bendtsen wrote:
 > <snip>
 >> #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1
 >> LIMIT 0, ' at line 1
 >>
 >> Kan du få noget ud af det?
 > 
 > Ret "on" til "where".
 > 
 Ok
 
 Så returneres der ingen rækker
 
 /Brian
  
            
             |   |   
            
        
 
            
         
                     Kristian Damm Jensen (07-05-2008) 
         
	
            | Kommentar Fra : Kristian Damm Jensen | 
  Dato :  07-05-08 07:14 |  
  |  
 
            Brian Bendtsen wrote:
 > Kristian Damm Jensen skrev:
 >> Brian Bendtsen wrote:
 >> <snip>
 >>> #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 'on fremmed_nogle = id_fr )  group by id  having count( * ) > 1
 >>> LIMIT 0, ' at line 1
 >>>
 >>> Kan du få noget ud af det?
 >>
 >> Ret "on" til "where".
 >>
 > Ok
 >
 > Så returneres der ingen rækker
 Godt.
 Vi har altså at
 select id , count(*)
 from opskrifter_tmp
 where exists
         (select * from reference_tabel_frankring
         where fremmed_noegle = id_fr)
 group by id
 having count(*)>1
 ikke returnerer noget.
 Så burde der heller ikke være problemer med
 update reference_tabel_frankring
 set fremmed_noegle =
         (select id from opskrifter_tmp
         where fremmed_noegle = id_fr)
 .... i al fald ikke med at sub-selecten returnerer mere end én værdi.
 Jeg har i et tidligere indlæg antydet, at problemet kunne være at mySQL 
 kontroller for multible værdier allerede når den parser udtrykket, og dermed 
 melder fejl når det er muligt at subselecten kan returnere mere end én 
 værdi, frem for at validere når udtrykket udføres. Men på 
 < http://dev.mysql.com/doc/refman/5.1/en/subquery-errors.html> påstår de, at 
 det ikke er tilfældet - validering sker først når udtrykket udføres og 
 fejlen optræder kun, når subselecten reelt returnerer mere end én værdi. Det 
 må man jo så tro på, indtil det modsatte er bevist. (Bemærk, at dette link 
 henviser til version 5.1. Du har ikke fortalt, hvilken version du benytter. 
 En anden version kunne opføre sig anderledes.)
 Problemet er så, at det ikke ud fra fejlmeldingen er mulgt at se, hvilke 
 data, der reelt fejler. Jeg vil foreslå, at du forsøger at køre opdateringen 
 på intervaller, for at spore hvor fejlen opstår.
 Altså fx
 update reference_tabel_frankring
 set fremmed_noegle =
         (select id from opskrifter_tmp
         where fremmed_noegle = id_fr)
 where id between <xxx> and <yyy>
 Hvor du med xxx og yyy arbejder dig igennem tabellen i mindre bidder.
 -- 
 Venlig hilsen /Best regards
 Kristian Damm Jensen 
            
              |   |   
            
        
 
            
         
                      Brian Bendtsen (07-05-2008) 
         
	
            | Kommentar Fra : Brian Bendtsen | 
  Dato :  07-05-08 09:54 |  
  |  
 
            Kristian Damm Jensen skrev:
 > Godt.
 > 
 > Vi har altså at
 > 
 > select id , count(*)
 > from opskrifter_tmp
 > where exists
 >         (select * from reference_tabel_frankring
 >         where fremmed_noegle = id_fr)
 > group by id
 > having count(*)>1
 > 
 > ikke returnerer noget.
 > 
 > 
 > Så burde der heller ikke være problemer med
 > 
 > update reference_tabel_frankring
 > set fremmed_noegle =
 >         (select id from opskrifter_tmp
 >         where fremmed_noegle = id_fr)
 > 
 > ... i al fald ikke med at sub-selecten returnerer mere end én værdi.
 > 
 > 
 > Jeg har i et tidligere indlæg antydet, at problemet kunne være at mySQL 
 > kontroller for multible værdier allerede når den parser udtrykket, og dermed 
 > melder fejl når det er muligt at subselecten kan returnere mere end én 
 > værdi, frem for at validere når udtrykket udføres. Men på 
 > < http://dev.mysql.com/doc/refman/5.1/en/subquery-errors.html> påstår de, at 
 > det ikke er tilfældet - validering sker først når udtrykket udføres og 
 > fejlen optræder kun, når subselecten reelt returnerer mere end én værdi. Det 
 > må man jo så tro på, indtil det modsatte er bevist. (Bemærk, at dette link 
 > henviser til version 5.1. Du har ikke fortalt, hvilken version du benytter. 
 > En anden version kunne opføre sig anderledes.)
 > 
 > Problemet er så, at det ikke ud fra fejlmeldingen er mulgt at se, hvilke 
 > data, der reelt fejler. Jeg vil foreslå, at du forsøger at køre opdateringen 
 > på intervaller, for at spore hvor fejlen opstår.
 > 
 > Altså fx
 > 
 > update reference_tabel_frankring
 > set fremmed_noegle =
 >         (select id from opskrifter_tmp
 >         where fremmed_noegle = id_fr)
 > where id between <xxx> and <yyy>
 > 
 > Hvor du med xxx og yyy arbejder dig igennem tabellen i mindre bidder.
 > 
 Nu ser det ud til at virke. Tusind tak for din hjælp
 mvh. Brian
            
              |   |   
            
        
 
            
         
           Gert Krabsen (25-04-2008) 
         
	
            | Kommentar Fra : Gert Krabsen | 
  Dato :  25-04-08 12:09 |  
  |   
            Brian Bendtsen skrev:
 > Hej
 > 
 > Jeg står overfor en situation hvor jeg skal have flyttet data fra én 
 > mysql database til en anden.
 > 
 > Jeg har importeret tabellerne fra gammel til ny database og i de 
 > tilfælde hvor tabellerne er nogenlunde ens i struktur er der ingen 
 > problemer.
 > 
 > Der er dog det problem at jeg godt kunne tænke mig at sammenlægge to 
 > tabeller til én. Dette vil dog betyde at der er en masse relationer der 
 > vil gå i stykker.
 > 
 > Forestil jer at vi har to tabeller: opskrifter_italien og 
 > opskrifter_frankrig med de samme felter
 > 
 > Jeg vil sammenlægge disse så jeg har en tabel der hedder opskrifter, med 
 > et ekstra felt der hedder land, som så kan indehold italien og frankrig 
 > osv. skulle jeg have lyst til at udvide senere hen.
 > 
 > Problemet er bare at jeg har en del andre tabeller der relatere til de 
 > originale tabeller. Når jeg sammensmelter tabellerne vil opskrifterne få 
 > nye id-numre.
 > 
 > Er der nogen der har et godt tip til hvordan jeg ved brug af sql kan 
 > opdatere relationerne så de kommer til at passe?
 > 
 
 Jeg ville
 
 1. Samle de to tabeller i en ny tabel med et nyt, fælles unikt ID-felt:
      opskrifter_italien + opskrifter_frankrig -> opskrifter_alle
      med autoincrement-felt opskrifter_alle_ID
 
 2. På baggrund af denne nye tabel omnummerer alle de data i øvrige 
 tabeller, der skal have 'udskiftet' ID. Så:
 
     ingrediens.opskrift_italien_ID omdøbes til
     ingrediens.opskrift_alle_ID
 
     og værdien udskiftes til det nye fælles ID
 
 3. Slette det gamle ID-felt fra den nye tabel opskrifter_alle
 
  
            
             |   |   
            
        
 
            
         
           Peter Lykkegaard (25-04-2008) 
         
	
            | Kommentar Fra : Peter Lykkegaard | 
  Dato :  25-04-08 18:02 |  
  |   
            "Brian Bendtsen" skrev
 
 > Problemet er bare at jeg har en del andre tabeller der relatere til de 
 > originale tabeller. Når jeg sammensmelter tabellerne vil opskrifterne få 
 > nye id-numre.
 >
 Ikke nødvendigvis :)
 
 > Er der nogen der har et godt tip til hvordan jeg ved brug af sql kan 
 > opdatere relationerne så de kommer til at passe?
 >
 Du kan evt bibeholde de gamle id's (hvis du gerne vil have nye idnumre) og 
 lave et nyt felt og opdatere efterfølgende
 
 - Peter 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |