[SQL] Uitsluiten van records via meerdere kolommen

Pagina: 1
Acties:
  • 211 views sinds 30-01-2008
  • Reageer

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 30-11 22:01
Misschien dat iemand hier ervaring mee heeft.

Ik heb twee exact dezelfde tabellen waarin verschillende kolommen zitten.
Tabel 1 bevat de gegevens die gebruikt worden, tabel 2 wordt geladen met nieuwe gegevens.
De primary key zit op drie van deze kolommen: id, localeid, naam

Omdat ik vanuit tabel 2 records wil toevoegen/updaten vanuit tabel 1 wil ik twee queries maken, een update en een insert query.

Nu had ik gedacht de insert query op de volgende manier te maken:

SQL:
1
2
3
4
5
INSERT INTO tabel1
SELECT * FROM tabel2
WHERE ( tabel2.veld1d not in (select tabel1.veld1 from tabel1)
AND tabel2.veld2 not in (select tabel1.veld2 from tabel1)
AND tabel2.veld3 not in (select tabel1.veld3 from tabel1)


Deze query heeft echter niet het gewenste resultaat.

Eigenlijk zou het zoiets moeten zijn:

SQL:
1
2
3
SELECT * FROM tabel2
WHERE tabel2.veld1, tabel2.veld2, tabel2.veld3
not in (select table1.veld1, tabel1.veld2, tabel1.veld3 from tabel1)


Maar die query werkt natuurlijk niet.
Waarschijnlijk zou dit wel met een soort join moeten kunnen werken waarvan je het resultaat om zou moeten kunnen draaien, maar daar ben ik nog niet helemaal uit.

Als iemand een hint heeft?

edit: het gaat om een query voor Oracle

[ Voor 4% gewijzigd door rvrbtcpt op 21-05-2007 11:20 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
(tabel2.veld1, tabel2.veld2, tabel2.veld3) 
not in (select table1.veld1, tabel1.veld2, tabel1.veld3 from tabel1)

Who is John Galt?


Verwijderd

Je kan ook is kijken naar de MINUS operator, deze bepaalt het verschil tussen twee basisrelaties(=tabellen)

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 30-11 22:01
Bedankt.
Door ( en ) toe te voegen werkt het.

De hele query wordt dan:

SQL:
1
2
3
SELECT * 
FROM tabel2
WHERE (tabel2.veld1, tabel2.veld2, tabel2.veld3) NOT IN (select tabel1.veld1, tabel1.veld2, tabel1.veld3 from tabel1)


@Arcey: bedankt voor de tip. Dat ga ik nog even uitzoeken. Misschien dat ik dan twee variaties krijg van deze query. Dan kan ik nog even uitzoeken of een van de variaties sneller is.

[ Voor 27% gewijzigd door rvrbtcpt op 21-05-2007 11:28 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik gebruik zelf in dit soort gevallen alstijd EXISTS...