|
| 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
| |
|
|