/ 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
SQL: Hvordan findes forskellen mellem to r~
Fra : Demos


Dato : 03-04-03 23:56

Hej NG,

Jeg vil gerne vide, hvordan man kan finde forskellen mellem to resultatsæt
(en mængde af rækker) ved at sammenligne en kolonne fra hver af sættene og
returnerer de indgange, der findes i den ene men ikke i den anden.

På forhånd tak,
Demos
-----
Eksempel:

table1
field: 1,2,3

table2
field: 1,2

Umiddelbart ville jeg tro at noget lignende:

SELECT table1.field
FROM table1, table2
WHERE table1.field != table2.field
GROUP BY field

ville kunne gøre det men nej. Der returneres resultatsættet (field: 1, 2,
3), hvor jeg havde forventet (field: 3).
-----
SQL til tabeller hvis nogle skulle have lyst til at afprøve det:

CREATE TABLE `table1` (
`field` tinyint(3) unsigned default '0'
) TYPE=MyISAM;
INSERT INTO `table1` (`field`) VALUES("1");
INSERT INTO `table1` (`field`) VALUES("2");
INSERT INTO `table1` (`field`) VALUES("3");
CREATE TABLE `table2` (
`field` tinyint(3) unsigned default '0'
) TYPE=MyISAM;
INSERT INTO `table2` (`field`) VALUES("1");
INSERT INTO `table2` (`field`) VALUES("2");



 
 
Jens Gyldenkærne Cla~ (04-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-04-03 09:05

Demos skrev:

> Jeg vil gerne vide, hvordan man kan finde forskellen mellem to
> resultatsæt (en mængde af rækker) ved at sammenligne en
> kolonne fra hver af sættene og returnerer de indgange, der
> findes i den ene men ikke i den anden.

Der er flere muligheder. Hvis databasen understøtter subselects kan
man skrive:

SELECT <felter>
FROM tabel1 t
WHERE NOT EXISTS (
   SELECT 'x'
   FROM tabel2
   WHERE idfelt = t.idfelt
   )

Nogle databaser understøtter ikke EXISTS-operatoren men derimod IN.
Her kan man skrive:

SELECT <felter>
FROM tabel1 t
WHERE NOT idfelt NOT IN (
   SELECT idfelt
   FROM tabel2
   )


Uden et subselect kan man benytte OUTER JOIN:

SELECT <felter>
FROM tabel1 t1 LEFT OUTER JOIN tabel2 t2
   ON t1.idfelt = t2.idfelt
WHERE t2.idfelt IS NULL
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Peter Lykkegaard (04-04-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 04-04-03 13:06

Som svar på skriblerier nedfældet af Jens Gyldenkærne Clausen :

> SELECT <felter>
> FROM tabel1 t
> WHERE NOT idfelt NOT IN (

NOT idfelt NOT IN ?

mvh/Peter Lykkegaard





Jens Gyldenkærne Cla~ (04-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-04-03 13:15

Peter Lykkegaard skrev:

>> SELECT <felter>
>> FROM tabel1 t
>> WHERE NOT idfelt NOT IN (
>
> NOT idfelt NOT IN ?

Argh - forbandet være klippe klistre-metoden.

Slet det første NOT.

--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Demos (04-04-2003)
Kommentar
Fra : Demos


Dato : 04-04-03 19:08

Jens Gyldenkærne Clausen <jens@gyros.invalid> wrote:
> Uden et subselect kan man benytte OUTER JOIN:
>
> SELECT <felter>
> FROM tabel1 t1 LEFT OUTER JOIN tabel2 t2
> ON t1.idfelt = t2.idfelt
> WHERE t2.idfelt IS NULL

Mange tak for hjælpen - det var lige, hvad jeg skulle bruge!



Nis Jorgensen (04-04-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 04-04-03 09:32

On Fri, 4 Apr 2003 00:55:51 +0200, "Demos" <demos@mailme.dk> wrote:

>
>Jeg vil gerne vide, hvordan man kan finde forskellen mellem to resultatsæt
>(en mængde af rækker) ved at sammenligne en kolonne fra hver af sættene og
>returnerer de indgange, der findes i den ene men ikke i den anden.

SELECT field
FROM table1

EXCEPT

SELECT field
FROM table2

(men det virker sikkert ikke når du ikke angiver hvad databasesystem
du bruger)

--
Nis Jørgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste