/ 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
Finde poster uden
Fra : Carzten Christensen


Dato : 19-10-06 23:52


Jeg har 2 tabeller med anmeldelser, den ene indeholder steder, den
anden selve anmeldelserne.

tabel steder
id
navn
tlf
osv.

tabel anmeld
id
fk_steder
stjerner
osv

steder.id = anmeld.fk_steder

Der er nu sket det at der er kommet flere poster ind i steder
tabellen, som er dubletter eller på anden måde irrelevante.
De skal fjernes, men selvfølgelig kun de, der ikke er i anmeld
tabellen.

Jeg vil derfor gerne lave en forespørgsel der fortæller
hvilke steder.id, der ikke er repræsenteret i anmeld.fk_steder
men jeg har brug for hjælp til at lave forespørgselen, da det er lidt
over mit sql niveau.


Er der nogen der har et bud ?


På forhånd tak



Mvh Carsten Christensen
http://grillbarguiden.dk

 
 
Martin (20-10-2006)
Kommentar
Fra : Martin


Dato : 20-10-06 09:45

Carzten Christensen wrote:
> Jeg har 2 tabeller med anmeldelser, den ene indeholder steder, den
> anden selve anmeldelserne.
>
> tabel steder
> id
> navn
> tlf
> osv.
>
> tabel anmeld
> id
> fk_steder
> stjerner
> osv
>
> steder.id = anmeld.fk_steder
>
> Der er nu sket det at der er kommet flere poster ind i steder
> tabellen, som er dubletter eller på anden måde irrelevante.
> De skal fjernes, men selvfølgelig kun de, der ikke er i anmeld
> tabellen.
>
> Jeg vil derfor gerne lave en forespørgsel der fortæller
> hvilke steder.id, der ikke er repræsenteret i anmeld.fk_steder
> men jeg har brug for hjælp til at lave forespørgselen, da det er lidt
> over mit sql niveau.

Til en anden gang - så husk at lave et mellemled imellem de 2 tabeller.

Altså
tabel steder
tabel anmeld
tabel steder_to_anmeld

For så burde der ikke komme dubletter i steder, da 2 anmeldelser sagtens
kan dele samme sted.
Og hvis en anmeldelse er fx af en restaturant der ligger flere steder,
så kan der også være 1 anmeldelse til 2 steder fx. Den 3. tabel (ved
egentlig ikke hvad sådan en type tabel hedder?) synes jeg er rigtig skøn
at have.


> Er der nogen der har et bud ?

Nu ved vi jo ikke hvilken database du bruger (mysql, mssql osv.?)
Men mit halv kvalificeret bud er noget ala:

DELETE FROM steder AS s, anmeld AS a WHERE s.id NOT IN a.fk_steder

Jeg har ikke prøvet den overhovedet, men jeg vil tro den burde virke...
PS. husk lige at afprøve den på en test database før brug!!!!!

Jens Gyldenkærne Cla~ (20-10-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 20-10-06 10:05

Martin skrev:

> DELETE FROM steder AS s, anmeld AS a WHERE s.id NOT IN
> a.fk_steder

Det var en mærkværdig syntaks - fungerer den?


Hvis formålet er at slette poster i steder med et id det ikke
findes i feltet fk_steder i anmeld, kan man gøre som følger:

DELETE FROM steder
WHERE id NOT IN (SELECT fk_steder FROM anmeld)

- eller alternativt med EXISTS:

DELETE FROM steder
WHERE NOT EXISTS (SELECT 1 FROM anmeld WHERE fk_steder = steder.id)


> husk lige at afprøve den på en test database før brug!!!!!

Den simple måde at teste en sletteforespørgsel er ved at lave den
samme som select:

SELECT * FROM steder
WHERE NOT EXISTS (SELECT 1 FROM anmeld WHERE fk_steder = steder.id)

Det tager dog ikke højde for kaskadesletninger, triggere og andet
sjov - så hvis man anvender den slags og ikke er sikker på hvordan
det vil påvirke den aktuelle forespørgsel, er en reel test en
særdeles god ide.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen

Martin (20-10-2006)
Kommentar
Fra : Martin


Dato : 20-10-06 17:31

Jens Gyldenkærne Clausen wrote:
> Martin skrev:
>
>> DELETE FROM steder AS s, anmeld AS a WHERE s.id NOT IN
>> a.fk_steder
>
> Det var en mærkværdig syntaks - fungerer den?

Nææ sikkert ikke - a.fk_steder skulle nok have været hentet med en
subselect, som du også viser - kan jeg se nu :)
SQL er ikke min helt store force.

Michael Zedeler (21-10-2006)
Kommentar
Fra : Michael Zedeler


Dato : 21-10-06 16:10

Martin wrote:
> Carzten Christensen wrote:
>
>> Jeg har 2 tabeller med anmeldelser, den ene indeholder steder, den
>> anden selve anmeldelserne.
>>
>> tabel steder
>> id
>> navn
>> tlf
>> osv.
>>
>> tabel anmeld
>> id
>> fk_steder
>> stjerner osv
>>
>> steder.id = anmeld.fk_steder
>>
>> Der er nu sket det at der er kommet flere poster ind i steder
>> tabellen, som er dubletter eller på anden måde irrelevante.
>> De skal fjernes, men selvfølgelig kun de, der ikke er i anmeld
>> tabellen.
>>
>> Jeg vil derfor gerne lave en forespørgsel der fortæller hvilke
>> steder.id, der ikke er repræsenteret i anmeld.fk_steder
>> men jeg har brug for hjælp til at lave forespørgselen, da det er lidt
>> over mit sql niveau.
>
> Til en anden gang - så husk at lave et mellemled imellem de 2 tabeller.
>
> Altså
> tabel steder
> tabel anmeld
> tabel steder_to_anmeld
>
> For så burde der ikke komme dubletter i steder, da 2 anmeldelser sagtens
> kan dele samme sted.

Det lyder mærkeligt. Du prøver altså at overbevise Carsten om at han
skal gøre det muligt at anmelde flere steder på en gang (altså i én
anmeldelse)?

Jeg kan ikke lige se hvordan den struktur kan føre noget godt med sig.

> Og hvis en anmeldelse er fx af en restaturant der ligger flere steder,
> så kan der også være 1 anmeldelse til 2 steder fx. Den 3. tabel (ved
> egentlig ikke hvad sådan en type tabel hedder?) synes jeg er rigtig skøn
> at have.

....hvis man har brug for det. Jeg kan ikke lige se relevansen, men det
må Carsten jo selv vurdere. Det gør i hvertfald applikationen mere
kompleks at arbejde med.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Thorkil Olesen (22-10-2006)
Kommentar
Fra : Thorkil Olesen


Dato : 22-10-06 16:49

Martin <maa@scandesigns.dk> wrote:

> Carzten Christensen wrote:
> >
> > Der er nu sket det at der er kommet flere poster ind i steder
> > tabellen, som er dubletter eller på anden måde irrelevante.
> > De skal fjernes, men selvfølgelig kun de, der ikke er i anmeld
> > tabellen.
>
> Til en anden gang - så husk at lave et mellemled imellem de 2 tabeller.
>
> Altså
> tabel steder
> tabel anmeld
> tabel steder_to_anmeld

Æh, det kommer da an på, hvad der er Carsten vil. I Carstens opbygning
kan han have flere anmeldelser på det samme sted, men ikke flere steder
i den sammen anmeldelse. Hvis det er meningen, så er det gjort helt
rigtigt.

> For så burde der ikke komme dubletter i steder, da 2 anmeldelser sagtens
> kan dele samme sted.

Det forhindrer på ingen måde Carstens dubletter. Han har nogle steder,
som ikke har tilknyttet nogen anmeldelser, og det kan han lige så godt
have med den anden opbygning.

> > Er der nogen der har et bud ?

Der er allerede kommet nogle bud. En anden mulighed kunne være:

DELETE steder
FROM steder
LEFT JOIN anmeld ON steder.id = anmeld.fk_steder
WHERE anmeld.fk_steder IS NULL

--
Thorkil Olesen,
Hanstholm.

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

Månedens bedste
Årets bedste
Sidste års bedste