/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Sammenligning af felt i 2 databaser
Fra : Firestone


Dato : 09-05-08 09:38

Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
unikt i begge databaser.

database: KompletDB - felt 'navn'
Sammenlignes med
database: Inkomplet - felt 'navn'

output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
hvordan vil i gribe det an?

jeg har tænkt mig at lave det i php.

Mvh
Jan



 
 
Gert Krabsen (09-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 09-05-08 10:26

Firestone skrev:
> Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
> unikt i begge databaser.
>
> database: KompletDB - felt 'navn'
> Sammenlignes med
> database: Inkomplet - felt 'navn'
>
> output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
> hvordan vil i gribe det an?
>
> jeg har tænkt mig at lave det i php.


Hvoffer det - når nu det kan klares i en enkelt:


SELECT * FROM KompletDB
WHERE KompletDB.navn NOT IN
(
SELECT Inkomplet.navn
FROM Inkomplet
)

vupti..


...med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
for så er det noget helt andet og afhængigt af hvilken databasetype vi
snakker om..

alter.fire (09-05-2008)
Kommentar
Fra : alter.fire


Dato : 09-05-08 13:39

On 9 Maj, 11:26, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
wrote:
> Firestone skrev:
>
> > Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
> > unikt i begge databaser.
>
> > database: KompletDB - felt 'navn'
> > Sammenlignes med
> > database: Inkomplet - felt 'navn'
>
> > output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
> > hvordan vil i gribe det an?
>
> > jeg har tænkt mig at lave det i php.
>
> Hvoffer det - når nu det kan klares i en enkelt:
>
> SELECT * FROM KompletDB
> WHERE KompletDB.navn NOT IN
>   (
>    SELECT Inkomplet.navn
>    FROM Inkomplet
>   )
>
> vupti..
>
> ..med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
> for så er det noget helt andet og afhængigt af hvilken databasetype vi
> snakker om..

Det som du skriver det, holder ikke...

i en phpmyadmin, kan den ikke håndtere, database tabel uden
databasenavnet etc kompletDB.tabelnavn

Jeg forsøger lige med en mere klar formulering..

Jeg vil finde diff: kompletDB.tabel.navn
(databasenavn.tabelnavn.feltnavn) vs inkompletDB.tabel.navn
(database2navn.tabel2navn.felt2navn)

dvs jeg vil liste de navne fra kompletDB som ikke findes i
inkompletDBen

håber det hjælper lidt.

Jan


Gert Krabsen (09-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 09-05-08 21:02

alter.fire skrev:
> On 9 Maj, 11:26, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
> wrote:
>> Firestone skrev:
>>
>>> Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
>>> unikt i begge databaser.
>>> database: KompletDB - felt 'navn'
>>> Sammenlignes med
>>> database: Inkomplet - felt 'navn'
>>> output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
>>> hvordan vil i gribe det an?
>>> jeg har tænkt mig at lave det i php.
>> Hvoffer det - når nu det kan klares i en enkelt:
>>
>> SELECT * FROM KompletDB
>> WHERE KompletDB.navn NOT IN
>> (
>> SELECT Inkomplet.navn
>> FROM Inkomplet
>> )
>>
>> vupti..
>>
>> ..med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
>> for så er det noget helt andet og afhængigt af hvilken databasetype vi
>> snakker om..
>
> Det som du skriver det, holder ikke...

Jo det gør - hvis du læser al det jeg skrev. .

> i en phpmyadmin, kan den ikke håndtere, database tabel uden
> databasenavnet etc kompletDB.tabelnavn

Så er det jo også fordi det - som jeg tog forbehold for - drejer sig om
to tabeller i forskellige _databaser_ . Og så er det som sagt noget helt
andet.

> Jeg forsøger lige med en mere klar formulering..
>
> Jeg vil finde diff: kompletDB.tabel.navn
> (databasenavn.tabelnavn.feltnavn) vs inkompletDB.tabel.navn
> (database2navn.tabel2navn.felt2navn)
>
> dvs jeg vil liste de navne fra kompletDB som ikke findes i
> inkompletDBen

Så ville jeg starte med at importere tabellen fra inkompletDB over i
kompletDB. Simpelthen fordi det nemt bliver noget pangel, når man vil
lave en SQL på tværs af databaser.

N/A (10-05-2008)
Kommentar
Fra : N/A


Dato : 10-05-08 08:34



Kristian Damm Jensen (10-05-2008)
Kommentar
Fra : Kristian Damm Jensen


Dato : 10-05-08 23:11

alter.fire wrote:
> On 9 Maj, 11:26, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
> wrote:
>> Firestone skrev:
>>
>>> Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt
>>> er også unikt i begge databaser.
>>
>>> database: KompletDB - felt 'navn'
>>> Sammenlignes med
>>> database: Inkomplet - felt 'navn'
>>
>>> output skal være de entries i KompletDB, som ikke forefindes i
>>> InkompletDB hvordan vil i gribe det an?
>>
>>> jeg har tænkt mig at lave det i php.
>>
>> Hvoffer det - når nu det kan klares i en enkelt:
>>
>> SELECT * FROM KompletDB
>> WHERE KompletDB.navn NOT IN
>> (
>> SELECT Inkomplet.navn
>> FROM Inkomplet
>> )
>>
>> vupti..
>>
>> ..med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
>> for så er det noget helt andet og afhængigt af hvilken databasetype
>> vi snakker om..
>
> Det som du skriver det, holder ikke...
>
> i en phpmyadmin, kan den ikke håndtere, database tabel uden
> databasenavnet etc kompletDB.tabelnavn
>
> Jeg forsøger lige med en mere klar formulering..
>
> Jeg vil finde diff: kompletDB.tabel.navn
> (databasenavn.tabelnavn.feltnavn) vs inkompletDB.tabel.navn
> (database2navn.tabel2navn.felt2navn)
>
> dvs jeg vil liste de navne fra kompletDB som ikke findes i
> inkompletDBen

Det ville hjælpe betydeligt, hvis du skrev, hvilket system du anvender. De
fleste større systemer tillader at man refererer tabeller fra én DB, når man
er logget på en anden, fx gennem syntaksen <db>.<tabel> eller
<db>.<user>.<tabel>

--
Venlig hilsen /Best regards
Kristian Damm Jensen



Firestone (11-05-2008)
Kommentar
Fra : Firestone


Dato : 11-05-08 07:16

Jeg bruger mysql 5 i det her projekt..

Jeg har rodet lidt med at hente komplet databasen ind i et array, og imens
den tager records one by one
så køre en "select * from table where arrayresult LIKE name

og så køre if false write log

Så den mens den henter array ind fra kompletdb, så også laver opslag i
inkomplet db for at se om data pr record fra name findes,
og hvis den er false, skriver en log entry.. Er dette ikke muligt sådan
logisk set?

Jan



Leif Neland (13-05-2008)
Kommentar
Fra : Leif Neland


Dato : 13-05-08 13:13


"Firestone" <firestone_dk@hotmail.com> skrev i en meddelelse
news:48268f2b$0$312$157c6196@dreader1.cybercity.dk...
> Jeg bruger mysql 5 i det her projekt..
>
> Jeg har rodet lidt med at hente komplet databasen ind i et array, og imens
> den tager records one by one
> så køre en "select * from table where arrayresult LIKE name
>
> og så køre if false write log
>
> Så den mens den henter array ind fra kompletdb, så også laver opslag i
> inkomplet db for at se om data pr record fra name findes,
> og hvis den er false, skriver en log entry.. Er dette ikke muligt sådan
> logisk set?
>
Jo, men jeg har den erfaring, at løkker lavet i et programmeringssprog
(asp/php/whatever) er mange størrelsesordner langsommere end hvis det hele
kan laves i en sql-sætning, specielt hvis tabellerne er rigtigt indexerede.

Jeg forkortede et job af typen "For hver record i tabel A, slå den op i
tabel B og..." fra et par minutter til et kvart sekund.

Fordi jeg gik fra 50000 queries fra php->mysql til et enkelt. Det tog dog
et par ilterationer at lave det maxi-query

Leif





N/A (09-05-2008)
Kommentar
Fra : N/A


Dato : 09-05-08 21:02



alter.fire (09-05-2008)
Kommentar
Fra : alter.fire


Dato : 09-05-08 14:49

On 9 Maj, 22:01, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
wrote:
> alter.fire skrev:
>
>
>
>
>
> > On 9 Maj, 11:26, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
> > wrote:
> >> Firestone skrev:
>
> >>> Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
> >>> unikt i begge databaser.
> >>> database: KompletDB - felt 'navn'
> >>> Sammenlignes med
> >>> database: Inkomplet - felt 'navn'
> >>> output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
> >>> hvordan vil i gribe det an?
> >>> jeg har tænkt mig at lave det i php.
> >> Hvoffer det - når nu det kan klares i en enkelt:
>
> >> SELECT * FROM KompletDB
> >> WHERE KompletDB.navn NOT IN
> >>   (
> >>    SELECT Inkomplet.navn
> >>    FROM Inkomplet
> >>   )
>
> >> vupti..
>
> >> ..med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
> >> for så er det noget helt andet og afhængigt af hvilken databasetype vi
> >> snakker om..
>
> > Det som du skriver det, holder ikke...
>
> Jo det gør - hvis du læser al det jeg skrev.  .
>
> > i en phpmyadmin, kan den ikke håndtere, database tabel uden
> > databasenavnet etc kompletDB.tabelnavn
>
> Så er det jo også fordi det - som jeg tog forbehold for - drejer sig om
> to tabeller i forskellige _databaser_ . Og så er det som sagt noget helt
> andet.
>
> > Jeg forsøger lige med en mere klar formulering..
>
> > Jeg vil finde diff: kompletDB.tabel.navn
> > (databasenavn.tabelnavn.feltnavn) vs inkompletDB.tabel.navn
> > (database2navn.tabel2navn.felt2navn)
>
> > dvs jeg vil liste de navne fra kompletDB som ikke findes i
> > inkompletDBen
>
> Så ville jeg starte med at importere tabellen fra inkompletDB over i
> kompletDB. Simpelthen fordi det nemt bliver noget pangel, når man vil
> lave en SQL på tværs af databaser.- Skjul tekst i anførselstegn -
>
> - Vis tekst i anførselstegn -

Ville det så ikke være muligt med en left join ? og så sammenligne
tabellerne ? selvom problemer nok er at de har samme 2 navne. bare fra
hver deres database?

Jan

Gert Krabsen (10-05-2008)
Kommentar
Fra : Gert Krabsen


Dato : 10-05-08 08:34

alter.fire skrev:
> On 9 Maj, 22:01, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
> wrote:
>> alter.fire skrev:
>>
>>
>>
>>
>>
>>> On 9 Maj, 11:26, Gert Krabsen <fjernkrab...@fjernkrabsenfjern.dk>
>>> wrote:
>>>> Firestone skrev:
>>>>> Jeg vil sammenligne 2 databasers felt som hedder "navn" dette felt er også
>>>>> unikt i begge databaser.
>>>>> database: KompletDB - felt 'navn'
>>>>> Sammenlignes med
>>>>> database: Inkomplet - felt 'navn'
>>>>> output skal være de entries i KompletDB, som ikke forefindes i InkompletDB
>>>>> hvordan vil i gribe det an?
>>>>> jeg har tænkt mig at lave det i php.
>>>> Hvoffer det - når nu det kan klares i en enkelt:
>>>> SELECT * FROM KompletDB
>>>> WHERE KompletDB.navn NOT IN
>>>> (
>>>> SELECT Inkomplet.navn
>>>> FROM Inkomplet
>>>> )
>>>> vupti..
>>>> ..med forbehold for, at du mener to _tabeller_ og ikke to _databaser_
>>>> for så er det noget helt andet og afhængigt af hvilken databasetype vi
>>>> snakker om..
>>> Det som du skriver det, holder ikke...
>> Jo det gør - hvis du læser al det jeg skrev. .
>>
>>> i en phpmyadmin, kan den ikke håndtere, database tabel uden
>>> databasenavnet etc kompletDB.tabelnavn
>> Så er det jo også fordi det - som jeg tog forbehold for - drejer sig om
>> to tabeller i forskellige _databaser_ . Og så er det som sagt noget helt
>> andet.
>>
>>> Jeg forsøger lige med en mere klar formulering..
>>> Jeg vil finde diff: kompletDB.tabel.navn
>>> (databasenavn.tabelnavn.feltnavn) vs inkompletDB.tabel.navn
>>> (database2navn.tabel2navn.felt2navn)
>>> dvs jeg vil liste de navne fra kompletDB som ikke findes i
>>> inkompletDBen
>> Så ville jeg starte med at importere tabellen fra inkompletDB over i
>> kompletDB. Simpelthen fordi det nemt bliver noget pangel, når man vil
>> lave en SQL på tværs af databaser.- Skjul tekst i anførselstegn -
>>
>> - Vis tekst i anførselstegn -
>
> Ville det så ikke være muligt med en left join ? og så sammenligne
> tabellerne ? selvom problemer nok er at de har samme 2 navne. bare fra
> hver deres database?

Nej. For en SQL med JOIN lister jo de resultater, hvor der _er_ records
i begge tabeller. Og du ønsker jo de resultater, hvor der _ikke er_
records i begge tabeller.

Og så er min første SQL - den med 'NOT IN' - den rigtige. Og kan den
ikke laves på tværs af databaser, ja så må du som skrevet lægge
tabellerne i samme database først.

Peter Brodersen (10-05-2008)
Kommentar
Fra : Peter Brodersen


Dato : 10-05-08 11:20

On Sat, 10 May 2008 09:33:42 +0200, Gert Krabsen
<fjernkrabsen@fjernkrabsenfjern.dk> wrote:

>> Ville det så ikke være muligt med en left join ? og så sammenligne
>> tabellerne ? selvom problemer nok er at de har samme 2 navne. bare fra
>> hver deres database?
>
>Nej. For en SQL med JOIN lister jo de resultater, hvor der _er_ records
>i begge tabeller. Og du ønsker jo de resultater, hvor der _ikke er_
>records i begge tabeller.

En gammel workaround før subselects var en left join, og så kun hente
records, hvor en værdi fra den anden tabel var NULL.

Det vil give det samme resultat som NOT IN.

--
- Peter Brodersen
Kendt fra Internet

Kristian Damm Jensen (10-05-2008)
Kommentar
Fra : Kristian Damm Jensen


Dato : 10-05-08 23:08

Peter Brodersen wrote:
<snip><
> En gammel workaround før subselects var en left join, og så kun hente
> records, hvor en værdi fra den anden tabel var NULL.

Skal vi ikke lige præcisere: En gammel workaround i MySQL. Subselects har
altid været en del af standard-SQL og i mine øjne er det en kilde til evig
skam, at MySQL sendte adskillige versionener ud, der ikke understøttede
subselects.

--
Venlig hilsen /Best regards
Kristian Damm Jensen



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste