[SQL] Vergelijking maken binnen query?

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

  • bdu
  • Registratie: Februari 2002
  • Laatst online: 16:18
Hoi,


Ik wil een query maken waar binnen de query een vergelijking word gemaakt.

Ik heb 2 tabellen en daarin 2 velden die eigenlijk hetzelfde moeten zijn maar door een foutje van elkaar afwijken. Nu kan ik alle records listen... maar ik wil alleen de records listen die van elkaar op die 2 velden afwijken.. dus daar waar de ene anders in dan de andere.. die dan laten zien.

situatie:

Tabel 1Tabel 2 
AA 
BAdeze
ACdeze
ACdeze
BAdeze
BAdeze
BCdeze
CC 
CC 
CBdeze


"deze" die zou hij dan alleen moeten listen...

Hoe doe ik dat in (MS)SQL.. of is dit onmogelijk?

Verwijderd

Ik neem aan dat de tabellen wel een gezamelijk, gelijk veld bevatten? Hoe zien de tabellen er precies uit?

Overigens schets je in bovenstaande situatie een foutief model. Informatie dien je niet dubbel op te slaan, wat je dus wel wilt. Tenzij het een ID veld betreft, dient een veld maar één maal in een database voor te komen. En een enkele char als ID, wil je niet.

[ Voor 79% gewijzigd door Verwijderd op 13-12-2004 18:51 ]


  • Erycius
  • Registratie: Januari 2003
  • Laatst online: 09-03 00:32

Erycius

I came on Eileen.

SELECT t1.kolom, t2.kolom FROM tabel1 as t1, tabel2 as t2 WHERE NOT (t1.kolom = t2.kolom)

Bloemen scheiden het gras in de tuin.


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 13:29

Freee!!

Trotse papa van Toon en Len!

Hoe zijn die tabellen georganiseerd? Wat voor sleutel? Hoeveel velden?

code:
1
2
SELECT T1.VELD, T2.VELD, 'deze' FROM TABEL1 T1, TABEL2 T2
 WHERE T1.KEY = T2.KEY AND NOT T1.VELD = T2.VELD

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

EryciusPuteanus schreef op maandag 13 december 2004 @ 18:51:
SELECT t1.kolom, t2.kolom FROM tabel1 as t1, tabel2 as t2 WHERE NOT (t1.kolom = t2.kolom)
Dit gaat nooit werken. Er zal op z'n minst nog een WEL verbindend veld moeten zijn. Immers de waardes A, B en C komen in beide kolommen wel een keer voor.

Overigens kun je ook schrijven 'WHERE t1.kolom<>t2.kolom', komt op hetzelfde neer.

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 13:29

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op maandag 13 december 2004 @ 18:53:
[...]
Overigens kun je ook schrijven 'WHERE t1.kolom<>t2.kolom', komt op hetzelfde neer.
Ik ken iets teveel SQL-engines die problemen maken van "<>", dus codeer ik automatisch maar een "NOT =".

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • bdu
  • Registratie: Februari 2002
  • Laatst online: 16:18
Verwijderd schreef op maandag 13 december 2004 @ 18:50:
Ik neem aan dat de tabellen wel een gezamelijk, gelijk veld bevatten? Hoe zien de tabellen er precies uit?

Overigens schets je in bovenstaande situatie een foutief model. Informatie dien je niet dubbel op te slaan, wat je dus wel wilt. Tenzij het een ID veld betreft, dient een veld maar één maal in een database voor te komen. En een enkele char als ID, wil je niet.
Er zijn inderdaad overeenkomende velden..

In tabel B komt veldID van tabel A terug... maar het gaat niet om dat veld..

En het klopt idd dat dan het model niet klopt.. ik heb helaas de database/toepassing niet gemaakt... maar moet er nu wel mee werken... :S.. dus oplossingen zoeken...

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 13:29

Freee!!

Trotse papa van Toon en Len!

bdu schreef op maandag 13 december 2004 @ 18:57:
[...]
Er zijn inderdaad overeenkomende velden..

In tabel B komt veldID van tabel A terug... maar het gaat niet om dat veld..
Zie dan mijn oplossing.
En het klopt idd dat dan het model niet klopt.. ik heb helaas de database/toepassing niet gemaakt... maar moet er nu wel mee werken... :S.. dus oplossingen zoeken...
Bekend probleem, sterkte.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • Kristof
  • Registratie: Januari 2002
  • Laatst online: 07-11 08:40

Kristof

is een Belgisch product

EryciusPuteanus schreef op maandag 13 december 2004 @ 18:51:
SELECT t1.kolom, t2.kolom FROM tabel1 as t1, tabel2 as t2 WHERE NOT (t1.kolom = t2.kolom)
Dit gaat dus niet het gewenste resultaat opleveren.
Uw code maakt een cartesiaans product van beide tabbellen en verwijdert daaruit de records met gelijke waarde

[ Voor 42% gewijzigd door Kristof op 13-12-2004 19:03 ]

"You can get more with a kind word and a gun than you can with a kind word alone." - Al Capone


  • Erycius
  • Registratie: Januari 2003
  • Laatst online: 09-03 00:32

Erycius

I came on Eileen.

Verwijderd schreef op maandag 13 december 2004 @ 18:53:
[...]

Dit gaat nooit werken. Er zal op z'n minst nog een WEL verbindend veld moeten zijn. Immers de waardes A, B en C komen in beide kolommen wel een keer voor.

Overigens kun je ook schrijven 'WHERE t1.kolom<>t2.kolom', komt op hetzelfde neer.
Oeps natuurlijk...
ach het is voor iedereen maandagavond ;)

maar dat van die <> wist ik dan weer wel dat dat problemen zou geven

Bloemen scheiden het gras in de tuin.


  • bdu
  • Registratie: Februari 2002
  • Laatst online: 16:18
Volgens mij heb ik het!!

Ik wist niet dat je ook kon verwijzen naar een veld... :D

Prachtig, BEDANKT

Verwijderd

EryciusPuteanus schreef op maandag 13 december 2004 @ 19:03:
maar dat van die <> wist ik dan weer wel dat dat problemen zou geven
Kan problemen geven, hoeft niet :P

Waarom doe je niet gewoon het volgende?

code:
1
2
3
4
5
6
update
  tabel1, tabel2
set
  tabel1.het_veld = tabel2.hetveld 
where
  tabel1.id = tabel2.tabel1_id


Dan heb je het probleem in één keer gefixxed..

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 13:29

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op maandag 13 december 2004 @ 19:32:
[...]
Kan problemen geven, hoeft niet :P
Maar waarom risico nemen :?
Waarom doe je niet gewoon het volgende?
code:
1
2
3
4
5
6
update
  tabel1, tabel2
set
  tabel1.het_veld = tabel2.hetveld 
where
  tabel1.id = tabel2.tabel1_id


Dan heb je het probleem in één keer gefixxed..
Dan heb je inderdaad het probleem in één keer gefixed ... na een kleine verbetering* en onder voorwaarde dat de correcte waarde altijd in tabel2 staat (of eventueel in tabel1, met een kleine aanpassing), maar wat als de correcte waarde soms in tabel1 staat, soms in tabel2 en soms in geen van beide :?


*Ik zou toch echt even een ongelijkheid in de WHERE-clausule opnemen.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT

Pagina: 1