/ 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
dobbelt betingelser
Fra : N9


Dato : 21-08-08 04:40

Hej

Jeg har følgende tabel.

tabel1

ID content
1 Contnet1
2 Content2
3 Content3
..........

tabel2

ID ref emne
1 1 5
2 1 2
3 2 2
4 2 4


select t1.* from tabel1 as t1 inner join tabel2 as t2 on t1.id =
t2.ref
where t2.emne = 5 and t2.emne = 2

Overstående sætning returnere ikke noget værdi

den gøre det kun hvis spørg på 1 emne

select t1.* from tabel1 as t1 inner join tabel2 as t2 on t1.id =
t2.ref
where t2.emne = 5

Det jeg ville have er betingelse på "emne" skal opfylde begge "emne",
altså emne = 2 og emne = 5

Nogle ideer til at skrive den sql sætning

På forhånd mange tak

N9



 
 
Troels Arvin (21-08-2008)
Kommentar
Fra : Troels Arvin


Dato : 21-08-08 14:53

N9 wrote:
> Det jeg ville have er betingelse på "emne" skal opfylde begge "emne",
> altså emne = 2 og emne = 5
>
> Nogle ideer til at skrive den sql sætning

Det, som du er ude efter, er en form for relationel division. Så prøv at
google på "relational division".

SELECT ref,COUNT(*) FROM tabel2 WHERE emne IN (2,5) GROUP BY ref HAVING
COUNT(*)=2;

Nævnte sætning kan evt. kobles sammen med tabel1 på forskellig vis, hvis
du ønsker at koble informationerne sammen med tabel1's ID.

--
Troels

N9 (22-08-2008)
Kommentar
Fra : N9


Dato : 22-08-08 06:06


> SELECT ref,COUNT(*) FROM tabel2 WHERE emne IN (2,5) GROUP BY ref HAVING
> COUNT(*)=2;


Hej Trols

Tak for svaret det er lige det jeg skal bruge.

Men jeg har en anden spørgsmål, håber du evt. kan genneskue den.

tabel2


ID ref emne
1 1 5
2 1 2
3 2 2
4 2 4
5 2 5
6 3 1

Overstående tabel, ville jeg gerne, at hvis jeg spørge på emne = 5, så
ville jeg gerne have alle de emne række som er tilknyttet til ref 1 og
2, da ref 1 og 2 indholder 5.
Så resultat bliver 2,4,5

Håber at du forstår.

På forhånd tak.

N9


Thorbjørn Ravn Ander~ (22-08-2008)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 22-08-08 17:16

N9 skrev den 22-08-2008 14:06:

> ID ref emne
> 1 1 5
> 2 1 2
> 3 2 2
> 4 2 4
> 5 2 5
> 6 3 1
>
> Overstående tabel, ville jeg gerne, at hvis jeg spørge på emne = 5, så
> ville jeg gerne have alle de emne række som er tilknyttet til ref 1 og
> 2, da ref 1 og 2 indholder 5.
> Så resultat bliver 2,4,5
>
> Håber at du forstår.

Kan du lave en forespørgsel hvor du spørger på emne = 5 og får ID
returneret herfor?

--
Thorbjørn Ravn Andersen "... plus... Tubular Bells!"

N/A (22-08-2008)
Kommentar
Fra : N/A


Dato : 22-08-08 17:16



Troels Arvin (23-08-2008)
Kommentar
Fra : Troels Arvin


Dato : 23-08-08 12:42

N9 wrote:
> Overstående tabel, ville jeg gerne, at hvis jeg spørge på emne = 5, så
> ville jeg gerne have alle de emne række som er tilknyttet til ref 1 og
> 2, da ref 1 og 2 indholder 5.
> Så resultat bliver 2,4,5

Forespørgslen kan udtrykkes vha. en sub-query- eller en self-join-
konstruktion. Personligt finder jeg sub-query konstruktionen mest læsbar.
Ud fra en performance-mæssig betydning burde det være lige meget hvilken
du vælger, idet dit DBMS' optimizer normalt vil udføre begge
konstruktioner på samme måde.


Sub-query-konstruktionen:

SELECT DISTINCT emne
FROM tabel2
WHERE ref IN
(
SELECT ref
FROM tabel2
WHERE emne=5
);


Join-konstruktionen, læsevenlig form:

SELECT DISTINCT t2B.emne
FROM tabel2 AS t2A
JOIN tabel2 AS t2B USING(ref)
WHERE t2A.emne=5;

Join-konstruktionen, mere portabel (og nogle vil sige "sikrere" form,
fordi USING ikke anvendes):

SELECT DISTINCT t2B.emne
FROM tabel2 t2A
JOIN tabel2 t2B ON t2A.ref=t2B.ref
WHERE t2A.emne=5;

--
Troels

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

Månedens bedste
Årets bedste
Sidste års bedste