Hvordan sammenligner jeg to "results"?

Tags:    databaser

Hejsa

Jeg har to tabeller. Begge har rækken "theme".
Jeg vil gerne lave en "query" der giver et array, hvor alt indhold står i begge tabeller. Alt andet skal udelukkes. Hvordan gør jeg det?

Jeg har søgt på "compare mysql query" på Google, men uden resultat...

Mvh
Gunnar



Hej,

Jeg er ikke helt sikker på, at jeg forstår spørgsmålet, så du må tilgive mig, hvis jeg svarer helt hen i vejret...

Hvis vi har to tabeller; Table1 & Table2

THEME NAVN
----- ----------
1 Hans
2 Grete
3 Peter
4 Bent

THEME DATO ADRESSE
----- --------- -----------
1 07-01-27 Vesterbro
2 07-01-27 Nørrebro
1 07-01-27 Østerbro

Hentes der kun rækker som findes i begge tabeller sådan her:

SELECT A.NAVN, B.DATO, B.ADRESSE
FROM TABLE1 A, TABLE2 B
WHERE A.THEME = B.THEME;






Mjae... ikke helt.

TABEL A
række ID
række THEME

TABEL B
række ID
række THEME

Result = de ting der findes i begge tabeller i rækken THEME, og IKKE andet.

:-)

Gunnar



Hmm..
(Jeg skulle nok have ladet det sidste glas rødvin stå..)

TABELA indeholder en kolonne ved navn ID og en kolonne ved navn THEME
TABELB indeholder en kolonne ved navn ID og en kolonne ved navn THEME
Du vil gerne hente de rækker ud hvor TABELA og TABELB har værdien i kolonnen THEME tilfælles... eller ?





Hmm..
(Jeg skulle nok have ladet det sidste glas rødvin stå..)

TABELA indeholder en kolonne ved navn ID og en kolonne ved navn THEME
TABELB indeholder en kolonne ved navn ID og en kolonne ved navn THEME
Du vil gerne hente de rækker ud hvor TABELA og TABELB har værdien i kolonnen THEME tilfælles... eller ?



Just præcis! :-)



Hvor er det så denne select går galt i byen ?

SELECT A.NAVN, B.DATO, B.ADRESSE
FROM TABLE1 A, TABLE2 B
WHERE A.THEME = B.THEME;

Eller hvis vi siger:

SELECT * FROM TABLE1
WHERE THEME IN (SELECT THEME FROM TABLE2);





Mjae... ikke helt.

TABEL A
række ID
række THEME

TABEL B
række ID
række THEME

Result = de ting der findes i begge tabeller i rækken THEME, og IKKE andet.
:-) Gunnar


En UNION giver dig ALT FRA BEGGE tabeller, som er FORENINGSMÆNGDEN.

SELECT ID, THEME
FROM TABEL A
UNION
SELECT ID, THEME
FROM TABEL B;

For at få FÆLLESMÆNGDEN, skal du bruge en af de to konstruktioner som Jørgen Lehmann skrriver.

1. Ved brug af innerjoin

SELECT A.ID, A.THEME
FROM TABLE1 A, TABLE2 B
WHERE A.THEME = B.THEME;

2. Ved brug af subselect

SELECT * FROM TABLE1
WHERE THEME IN (SELECT THEME FROM TABLE2);

2a. En lidt anden variant med subselect,
som er hurtigere end ad. 2.

SELECT * FROM TABLE1 A
WHERE EXISTS (
SELECT 1
FROM TABLE2
WHERE THEME = A.THEME);

Den første (ad. 1) af disse to er dog den hurtigste at eksekvere. Husk at sørge for at indeksere din THEME kolonne og undgå at sammenligne på partielle strenge. Er din THEME kolonne i forvejen en nøgle, så bliver den automatisk indekseret.

Hth



Indlæg senest redigeret d. 15.02.2007 08:31 af Bruger #10448
t