/ 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
[mySQL] Problemer med RIGHT JOIN og filtre
Fra : Jesper Stocholm


Dato : 23-02-03 12:30

Jeg har en forespørgsel, der laver en RIGHT JOIN imellem to tabeller for
at finde antallet af rækker i tabel 2 for hver række i tabel 1 (primær
nøgle i tabel 1 er fremmed nøgle i tabel 2).

Min forespørgsel er

SELECT
c.id,c.strCategoryName,SUM(f.id) AS CountOfArticles
FROM
deiwsaspfaq f
RIGHT JOIN
deiwsaspcat c ON f.intCategoryId = c.id
GROUP BY
c.id,c.strCategoryName

Den giver et resultat som

strCategoryName    CountOfArticles
------------------------------------
Databaser        7
Dato,valuta,sprog    2
Email            0
Filsystemet        1
Forms            2
Generelt        8
Komponenter        0
Sikkerhed        3
Sockets        0
SQL            1
XML            1

Data i tabel 2 (deiwsaspfaq) er

strArticleName    intCategoryId tintApproved
--------------------------------------------------
Article 1        1            1
Article 2        1            1
Article 3        2            0

Data i tabel 1 (deiwsaspcat) er

1   Databaser
2   Filsystemet
3   Komponenter
4   Forms
5   Dato,valuta,sprog
6   Email
7   Generelt
8   XML
9   SQL
10   Sockets
11   Sikkerhed

Mit problem er, at min forespørgsel også indbefatter de rækker i tabel 2,
hvor tintApproved <> 1 - og det er en fejl. Jeg har forsøgt at indsætte
en WHERE-clause som

WHERE f.tintApproved = 1

.... men det resulterer i at kun kategorier med artikler returneres - og
jeg vil gerne vise dem alle.

Har jeg forklaret mig godt nok ... og i givet fald - hvordan grejer jeg
den ?



--
Jesper Stocholm - http://stocholm.dk
** Vil det sige, at ham Lars er et stort brød på 15 år ? **
Svar venligst til gruppen og ikke til mig privat !
Skriv under det du svarer på - www.usenet.dk/netikette/citatteknik.html

 
 
Morten Guldager (23-02-2003)
Kommentar
Fra : Morten Guldager


Dato : 23-02-03 13:05

Sun, 23 Feb 2003 at 11:30 GMT Jesper Stocholm wrote
> Jeg har en forespørgsel, der laver en RIGHT JOIN imellem to tabeller for
> at finde antallet af rækker i tabel 2 for hver række i tabel 1 (primær
> nøgle i tabel 1 er fremmed nøgle i tabel 2).
>
> Min forespørgsel er
> ...
> Mit problem er, at min forespørgsel også indbefatter de rækker i tabel 2,
> hvor tintApproved <> 1 - og det er en fejl. Jeg har forsøgt at indsætte
> en WHERE-clause som
>
> WHERE f.tintApproved = 1
>
> ... men det resulterer i at kun kategorier med artikler returneres - og
> jeg vil gerne vise dem alle.
>
> Har jeg forklaret mig godt nok ... og i givet fald - hvordan grejer jeg
> den ?

Hvis det her svarer dig har du forklaret godt nok:

mysql> select * from A;
+----------+
| navn |
+----------+
| Guldager |
| Jensen |
| Morten |
+----------+
3 rows in set (0.00 sec)

mysql> select * from B;
+-------+--------+------+
| ting | navn | tint |
+-------+--------+------+
| Cykel | Morten | 0 |
| hest | Morten | 1 |
+-------+--------+------+
2 rows in set (0.01 sec)

mysql> select A.navn, count(ting) as antal
from A
left join B using (navn)
where tint is null
or tint = 1
group by A.navn;
+----------+-------+
| navn | antal |
+----------+-------+
| Guldager | 0 |
| Jensen | 0 |
| Morten | 1 |
+----------+-------+
3 rows in set (0.01 sec)



/Morten

Jesper Stocholm (23-02-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 23-02-03 15:44

Morten Guldager wrote :

> Sun, 23 Feb 2003 at 11:30 GMT Jesper Stocholm wrote
>> Jeg har en forespørgsel, der laver en RIGHT JOIN imellem to tabeller
>> for at finde antallet af rækker i tabel 2 for hver række i tabel 1
>> (primær nøgle i tabel 1 er fremmed nøgle i tabel 2).
>>
>> Mit problem er, at min forespørgsel også indbefatter de rækker i
>> tabel 2, hvor tintApproved <> 1 - og det er en fejl. Jeg har forsøgt
>> at indsætte en WHERE-clause som
>>
>> Har jeg forklaret mig godt nok ... og i givet fald - hvordan grejer
>> jeg den ?
>
> Hvis det her svarer dig har du forklaret godt nok:
> mysql> select A.navn, count(ting) as antal
> from A
> left join B using (navn)
> where tint is null
> or tint = 1
> group by A.navn;


det ser i hvert fald ud til det ... jeg kunne ikke lige få using til at
virke, så jeg omskrev det til

SELECT
c.id,c.strCategoryName, COUNT(f.id) AS antal
FROM
deiwsaspcat c
LEFT JOIN
deiwsaspfaq f ON f.intCategoryID = c.id
WHERE
f.tintApproved IS NULL OR f.tintApproved = 1
GROUP BY
c.id,c.strCategoryName
ORDER BY 2 ASC

Der giver mig resultatet

Databaser (5)
Dato,valuta,sprog (2)
Email (0)
Filsystemet (1)
Forms (2)
Generelt (7)
Komponenter (0)
Sikkerhed (2)
Sockets (0)
SQL (1)
XML (1)

, hvilket er det ønskede.

mange tak ...



--
Jesper Stocholm - http://stocholm.dk
www.asp-faq.dk : FAQ for dk.edb.internet.webdesign.serverside.asp
www.usenet.dk/netikette/citatteknik.html : Skriv under det du svarer på
Svar til gruppen og ikke til mig privat !

Nis Jorgensen (25-02-2003)
Kommentar
Fra : Nis Jorgensen


Dato : 25-02-03 14:45

On Sun, 23 Feb 2003 14:43:32 +0000 (UTC), Jesper Stocholm
<skal.du.absolut.vise.min.emailadresse.ved.svar@stocholm.invalid>
wrote:

>
>det ser i hvert fald ud til det ... jeg kunne ikke lige få using til at
>virke, så jeg omskrev det til
>
>SELECT
> c.id,c.strCategoryName, COUNT(f.id) AS antal
>FROM
> deiwsaspcat c
> LEFT JOIN
> deiwsaspfaq f ON f.intCategoryID = c.id
>WHERE
> f.tintApproved IS NULL OR f.tintApproved = 1
> GROUP BY
> c.id,c.strCategoryName
>ORDER BY 2 ASC

Det bør ikke virke efter hensigten - men kan godt i nogle tilfælde
give det rigtige resultat. Det fejler hvis en kategori kun har
relaterede artikler med tintApproved <> 1.

Her er en repareret version - ved dog ikke om mySQL aeder den:

SELECT
c.id,c.strCategoryName, COUNT(f.id) AS antal
FROM
deiwsaspcat c
LEFT JOIN
deiwsaspfaq f ON f.intCategoryID = c.id
AND
f.tintApproved = 1
GROUP BY
c.id,c.strCategoryName
ORDER BY 2 ASC
--
Nis Jørgensen
Amsterdam

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

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

Månedens bedste
Årets bedste
Sidste års bedste